From e15d16b1728ce8b7241463e679c8c3e9e1cc4c2e Mon Sep 17 00:00:00 2001 From: lab2077 Date: Tue, 25 Feb 2025 18:54:48 +0000 Subject: [PATCH 1/3] Proyecto Intro a SQL - Luis Alpizar --- .gitignore | 2 +- src/app.py | 82 +++++++++++++++++++++++++++--------------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 1f84a50ea..8d1936259 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ +.venv .env -.learn diff --git a/src/app.py b/src/app.py index 0206b9347..e455c2848 100644 --- a/src/app.py +++ b/src/app.py @@ -1,79 +1,77 @@ import os import pandas as pd -from sqlalchemy import create_engine, text from dotenv import load_dotenv +import sqlite3 # Load environment variables load_dotenv() -# 1) Connect to the database with SQLAlchemy +# 1) Connect to the database with SQLite def connect(): global engine try: - connection_string = f"postgresql://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}/{os.getenv('DB_NAME')}" - print("Starting the connection...") - engine = create_engine(connection_string, isolation_level="AUTOCOMMIT") - engine.connect() - print("Connected successfully!") - return engine + db_name = "database.db" # Nombre de la base de datos SQLite + print("Iniciando conexión...") + conn = sqlite3.connect(db_name) # Crear conexión + print("Conectado exitosamente!") + return conn except Exception as e: - print(f"Error connecting to the database: {e}") + print(f"Error al conectar a la base de datos: {e}") return None -engine = connect() +conn = connect() -if engine is None: +if conn is None: exit() # 2) Create the tables -with engine.connect() as connection: - connection.execute(text(""" +with conn: + conn.executescript(""" CREATE TABLE IF NOT EXISTS publishers ( - publisher_id SERIAL PRIMARY KEY, - name VARCHAR(255) NOT NULL + publisher_id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS authors ( - author_id SERIAL PRIMARY KEY, - first_name VARCHAR(100) NOT NULL, - middle_name VARCHAR(50) NULL, - last_name VARCHAR(100) NULL + author_id INTEGER PRIMARY KEY AUTOINCREMENT, + first_name TEXT NOT NULL, + middle_name TEXT NULL, + last_name TEXT NULL ); CREATE TABLE IF NOT EXISTS books ( - book_id SERIAL PRIMARY KEY, - title VARCHAR(255) NOT NULL, - total_pages INT NULL, - rating DECIMAL(4, 2) NULL, - isbn VARCHAR(13) NULL, + book_id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + total_pages INTEGER NULL, + rating REAL NULL, + isbn TEXT NULL, published_date DATE, - publisher_id INT NULL, - CONSTRAINT fk_publisher FOREIGN KEY (publisher_id) REFERENCES publishers(publisher_id) ON DELETE SET NULL + publisher_id INTEGER NULL, + FOREIGN KEY (publisher_id) REFERENCES publishers(publisher_id) ON DELETE SET NULL ); CREATE TABLE IF NOT EXISTS book_authors ( - book_id INT NOT NULL, - author_id INT NOT NULL, + book_id INTEGER NOT NULL, + author_id INTEGER NOT NULL, PRIMARY KEY (book_id, author_id), - CONSTRAINT fk_book FOREIGN KEY (book_id) REFERENCES books(book_id) ON DELETE CASCADE, - CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES authors(author_id) ON DELETE CASCADE + FOREIGN KEY (book_id) REFERENCES books(book_id) ON DELETE CASCADE, + FOREIGN KEY (author_id) REFERENCES authors(author_id) ON DELETE CASCADE ); - """)) + """) # 3) Insert data -with engine.connect() as connection: - connection.execute(text(""" - INSERT INTO publishers (publisher_id, name) VALUES +with conn: + conn.executescript(""" + INSERT OR IGNORE INTO publishers (publisher_id, name) VALUES (1, 'O Reilly Media'), (2, 'A Book Apart'), (3, 'A K PETERS'), (4, 'Academic Press'), (5, 'Addison Wesley'), (6, 'Albert&Sweigart'), - (7, 'Alfred A. Knopf') - ON CONFLICT (publisher_id) DO NOTHING; + (7, 'Alfred A. Knopf'); - INSERT INTO authors (author_id, first_name, middle_name, last_name) VALUES + INSERT OR IGNORE INTO authors (author_id, first_name, middle_name, last_name) VALUES (1, 'Merritt', NULL, 'Eric'), (2, 'Linda', NULL, 'Mui'), (3, 'Alecos', NULL, 'Papadatos'), @@ -81,10 +79,12 @@ def connect(): (5, 'David', NULL, 'Cronin'), (6, 'Richard', NULL, 'Blum'), (7, 'Yuval', 'Noah', 'Harari'), - (8, 'Paul', NULL, 'Albitz') - ON CONFLICT (author_id) DO NOTHING; - """)) + (8, 'Paul', NULL, 'Albitz'); + """) # 4) Use Pandas to read and display a table -df = pd.read_sql("SELECT * FROM publishers;", engine) +df = pd.read_sql("SELECT * FROM publishers;", conn) print(df) + +# 5) Close connection +conn.close() \ No newline at end of file From c2518b948bf3c568d8bc945cd928250a618e6cfc Mon Sep 17 00:00:00 2001 From: lab2077 Date: Tue, 25 Feb 2025 19:02:15 +0000 Subject: [PATCH 2/3] Proyecto SQL - Luis Alpizar --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 2f24fd415..5c5089000 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,7 @@ pandas python-dotenv==0.20.0 psycopg2-binary==2.9.3 + numpy>=1.18.5 # opencv-python>=4.1.2 # matplotlib>=3.2.2 From 5f3f06966a6514956ca75c45c3e22e35bda05340 Mon Sep 17 00:00:00 2001 From: lab2077 Date: Tue, 25 Feb 2025 19:20:53 +0000 Subject: [PATCH 3/3] Proyecto Intro a SQL - Luis Alpizar --- database.db | Bin 0 -> 28672 bytes src/app.py | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 database.db diff --git a/database.db b/database.db new file mode 100644 index 0000000000000000000000000000000000000000..79cbca6e43fce73f22e9a38cf2b0740fd831ed7f GIT binary patch literal 28672 zcmeI4Uu+{s8Ng?~yWX`g&g9xVxu+8_c?cxBb89Dem&-{N-b?nT^=G zlZVGhn>@Ywt=!aaNcxOR=vV1e)0L_B&bU*rK1K(dkN^@u0!RP}AOR$R1dzZdo4|t| z)5_1yY2Oqv-}l6R5Zu}0{rE5lqw(kTYTb33E^9hBD=r&vVe?rwEJ?L&vyE!gU3crO zy4_^e-Ad*1sK>za-eddJ>Kj{5{WjZlZ?pNK$;)h{xo~Rj)^^?9Sg%g>TwrzgmRonL zt8OFlGdi)cz_zPw&8@gFja8?y>a4jRV(N6PabrU&^JA@#7)&O*u$)fkH|I1W{kFIt z-Sr?#QA~s6eQzAzUTOSIWh^RlArAt>%IEXiOV5sil0+ji9|=SB82;lVo!#d4Mitbz z+-mc5-m#25!J6*#5UEF^6$df*_Imt4M5i&Gh-b)S=^p?kr}9vwWwh@P?M`U)`um=Y z4n=#f%^`VPgGF`f%}HZ8u|g*FCt^O{e5D2sX!;K*Jp@&OykIH*_n1@uK!X zCd7xa9tvZE`ml10`=Dmr=l_CyM}|?n=kxA|;_u3K+Y{qmCP;XEQXd)zbE&1$`Ae6y z+sRCZ%P$gl`@(ODhhFuGnLX4vubjIKnhVEIYF2)BRy)3%*c>5^PM=Z}mQL%(FpVld zBB@6i4d$7HZ;C~~LFixU@910fNA!F26?nyh1dsp{Kmter2_OL^fCP{L5 z2s~lw|ns2_OL^fCP{L5={ zz^NI&)t56`Vtz}6p^RfUlr5G2XQzHf==b4tesTKO)2~eLOlNX$=ROaWSdah`Kmter z2_OL^fCP{L5Ci@Z&IO_gk@q z&C_wf;zPk|htdn8pm%u0f(~=SSaxJfa!+*@o+l5~L2vT=^3=}zFMaxr`pWY4;_}tv zpez=P%Z1`%p|oTj(+mv1n+)FsvraGYynwCuWt)S6kt5(o*gAwe3|etNgl^#Dc2B62 z|KQSmqZh&r03w84-2A?bk{#O-dxkZ79BjDvdtNZ;x}g2Ae0KhyKY#hl3*b@d%9W8v zrD8!jRZ3s8Z8Dem)7YuN_`x0ZU*J@uOkY*y+iE7)hH6Ea$<;z>5%jEEmQCD5@A<9D z4fX{Y^?}AtU$*WvV%R&L%t>gua&G;#b1(k!Ib~-F^pgT|1&qL-Sx(zzSF^~hHVA^c z+Mvr}?!E|*lHkZO!cUcFl(qHO1{RhIi;KpJX_HHdCyoy}Z1;$5cUWbkQPX}}KKn)z z4>fpkc{q3p-Ufr~UomX*HKm%V@fhOoM=H9FpcB8qLve#Oxd+!Ubi$yUEP|5;6{c?A zm+=wYeK&nN#L4uErInRyh2r%>>FRZT=v=1J;vQ$xXHK%PwC|R4YN_n}1>7mEj74Ut zP`pwo6`xJnWIF+Ki?5ky zChiF@=yio3CyU)Vkm@puAn@+Un0#=;_u+7XS%~~~Gs*wyPYC@t{Ri9u@MqWs@GgCu z{)+wrDzP8|B!C2v01`j~NB{{S0VIF~kN^@u0v|sCBdcqfteMd@En}EA2s>q3AS~TX zgGd{u3Boi@1B8(_br8B`ra+{iyPnBpVHR2Xy2}6mPTz++0Deo~p>IO=|6{1cf&`EN z5