Summary:
conda install pip
pip install ipython-sql
%load_ext sql
%sql sqlite://
%%sql
CREATE TABLE CUSTOMER(age int,
firstname varchar(50),
lastname varchar(50));
%%sql
DROP TABLE CUSTOMER;
%%sql
CREATE TABLE CUSTOMER(age int,
firstname varchar(50),
lastname varchar(50));
%%sql
INSERT INTO CUSTOMER VALUES(25,'Tom','Mitchell');
Fix error: "ResourceClosedError: This result object does not return rows. It has been closed automatically." %%sql
SET NOCOUNT ON;
The issue is that the UPDATE statement is returning a row count, which is a scalar value, and the rows returned by the SELECT statement are "stuck" behind the row count where pyodbc cannot "see" them (without additional machinations).
It is considered a best practice to ensure that our stored procedures always start with a SET NOCOUNT ON; statement to suppress the returning of row count values from DML statements (UPDATE, DELETE, etc.) and allow the stored procedure to just return the rows from the SELECT statement.
%%sql
INSERT INTO CUSTOMER VALUES(42,'John','Doe');
SET NOCOUNT ON;
%sql SELECT * from CUSTOMER;
%%sql
DROP TABLE CUSTOMER;
CREATE TABLE CUSTOMER(ID int NULL PRIMARY KEY,
age int,
firstname varchar(50),
lastname varchar(50));
%%sql
INSERT INTO CUSTOMER VALUES(1,25,'Tom','Mitchell');
INSERT INTO CUSTOMER VALUES(2,42,'John','Doe');
INSERT INTO CUSTOMER VALUES(3,25,'Tom','Mitchell');
%sql SELECT * from CUSTOMER;
Add autoincrement
%%sql
DROP TABLE CUSTOMER;
CREATE TABLE CUSTOMER(ID INTEGER NULL PRIMARY KEY AUTOINCREMENT,
age int,
firstname varchar(50),
lastname varchar(50));
%%sql
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (25,'Tom','Mitchell');
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (42,'John','Doe');
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (25,'Tom','Mitchell');
%sql SELECT * from CUSTOMER;
%%sql
UPDATE CUSTOMER SET age = 27 WHERE ID=1;
SELECT * from CUSTOMER;
%%sql
SELECT *
FROM CUSTOMER
WHERE lastname LIKE 'M%';
%%sql
DROP TABLE CUSTOMER;
DROP TABLE PRODUCT;
CREATE TABLE CUSTOMER(CUSTOMER_ID INTEGER NULL PRIMARY KEY AUTOINCREMENT,
age int,
firstname varchar(50),
lastname varchar(50));
CREATE TABLE PRODUCT(PRODUCT_ID INTEGER NULL PRIMARY KEY AUTOINCREMENT,
name varchar(50));
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (25,'James','Smith');
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (42,'Robert','Williams');
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (36,'Mary','Miller');
INSERT INTO CUSTOMER (age, firstname, lastname) VALUES (52,'Patricia','Smith');
INSERT INTO PRODUCT (name) VALUES ('Tomato');
INSERT INTO PRODUCT (name) VALUES ('Orange');
INSERT INTO PRODUCT (name) VALUES ('Potato');
%%sql
SELECT * from CUSTOMER;
%%sql
SELECT * from PRODUCT;
%%sql
DROP TABLE PRODUCT_ORDER;
CREATE TABLE PRODUCT_ORDER(ORDER_ID INTEGER NULL PRIMARY KEY AUTOINCREMENT,
price int,
order_date DATE,
CUSTOMER_ID INTEGER,
PRODUCT_ID INTEGER,
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMER(CUSTOMER_ID)
FOREIGN KEY (PRODUCT_ID) REFERENCES PRODUCT(PRODUCT_ID)
);
INSERT INTO PRODUCT_ORDER (price,order_date,CUSTOMER_ID,PRODUCT_ID) VALUES (4,'2021-05-07',1,1);
INSERT INTO PRODUCT_ORDER (price,order_date,CUSTOMER_ID,PRODUCT_ID) VALUES (3,'2021-05-07',1,3);
INSERT INTO PRODUCT_ORDER (price,order_date,CUSTOMER_ID,PRODUCT_ID) VALUES (3,'2021-05-07',2,3);
INSERT INTO PRODUCT_ORDER (price,order_date,CUSTOMER_ID,PRODUCT_ID) VALUES (4,'2021-05-04',3,1);
INSERT INTO PRODUCT_ORDER (price,order_date,CUSTOMER_ID,PRODUCT_ID) VALUES (4,'2021-05-04',3,1);
SELECT * from PRODUCT_ORDER;
%%sql
SELECT * FROM CUSTOMER INNER JOIN PRODUCT_ORDER ON CUSTOMER.CUSTOMER_ID = PRODUCT_ORDER.CUSTOMER_ID ;
%%sql
SELECT * FROM
( SELECT * FROM
CUSTOMER
INNER JOIN
PRODUCT_ORDER
ON CUSTOMER.CUSTOMER_ID = PRODUCT_ORDER.CUSTOMER_ID) a
INNER JOIN
PRODUCT
ON PRODUCT.PRODUCT_ID = a.PRODUCT_ID
;
Installing SQLAlchemy and connecting to database
public sql database
http://2016.padjo.org/tutorials/sqlite-data-starterpacks/ https://www.sqlitetutorial.net/sqlite-sample-database/
import sqlalchemy
%sql sqlite:///chinook.db
sqlalchemy sqlite get all tables in database
https://stackoverflow.com/questions/6473925/sqlalchemy-getting-a-list-of-tables
engine = sqlalchemy.create_engine('sqlite:///chinook.db')
print(engine.table_names())
%sql SELECT * from employees;