La instrucci贸n if __name__ == "__main__": comprueba si el script se est谩 ejecutando como programa principal. Si es as铆, llama a la funci贸n init() que de momento solo tiene la declaraci贸n pass esto es m谩s que nada para promover la modularidad y la reutilizaci贸n. Permite que el script sirva como programa independiente y como m贸dulo importable.
Abrir una nueva conexi贸n a SQLITE
main.py
Ahora como se puede observar en el c贸digo anterior, importamos el m贸dulo de sqlite3 que viene integrado con Python y dentro de la funci贸n init() que arranca junto a la ejecuci贸n del programa almacenamos en la variable conexion una nueva conexi贸n a un archivo llamado cars.db.
Crear una tabla en la base de datos
Para facilitarnos la existencia, vamos a modularizar el c贸digo, quiere decir que vamos subdividir el programa en m谩s archivos.
importsqlite3fromsqlite3importErrorimportosCURDIR=os.path.dirname(os.path.abspath(__file__))FILENAME="schema.sql"FILE=os.path.join(CURDIR,"db",FILENAME)defopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen(FILE,'r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
Como vemos en primer lugar tenemos que importar el m贸dulo, luego tenemos que definir algunas funciones como:
open_db()
Se encargar谩 de crear o abrir la base de datos envultos en un bloque try/except para manejar posibles errores.
run_query
Esta funci贸n va a utilizar la conexi贸n que retorna open_db y con ella podemos realizar consultas a la base de datos.
create_schema()
La funci贸n va a construir el esquema de la base de datos que tenemos que crearlo luego en un archivo schema.sql.
importsqlite3fromsqlite3importErrorimportosCURDIR=os.path.dirname(os.path.abspath(__file__))FILENAME="schema.sql"FILE=os.path.join(CURDIR,"db",FILENAME)defopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen(FILE,'r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
importsqlite3fromsqlite3importErrorimportosCURDIR=os.path.dirname(os.path.abspath(__file__))FILENAME="schema.sql"FILE=os.path.join(CURDIR,"db",FILENAME)defopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen(FILE,'r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
importsqlite3fromsqlite3importErrordefopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen('db/schema.sql','r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
1
2
3
4
5
6
7
8
9
10
11
+-------+-----------+--------------------+
| rowid | brand | model |
+-------+-----------+--------------------+
| 1 | Chevrolet | Chevrolet Camaro |
| 2 | Chevrolet | Chevrolet Captiva |
| 3 | Fiat | Fiat 125 Mirafiori |
| 4 | Fiat | Fiat 125 Centurion |
| 5 | Honda | Honda CR-V |
| 6 | Honda | Honda CR-X del Sol |
| 7 | Honda | Honda CR-Z |
+-------+-----------+--------------------+
prettytable es una librer铆a de Python que da formato de tabla a los datos por consola.
importdbfromprettytableimportfrom_db_cursor# pip install prettytable
defupdate_data(model,newModel):update_query="UPDATE cars SET model = ? WHERE model = ?"db.run_query(update_query,(newModel,model))defget_data():select_query="SELECT * FROM cars"result=db.run_query(select_query)mytable=from_db_cursor(result)mytable.align="l"print(mytable)
importsqlite3fromsqlite3importErrordefopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen('db/schema.sql','r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
1
2
3
4
5
6
7
8
9
10
11
+-------+-----------+---------------+
| rowid | brand | model |
+-------+-----------+---------------+
| 1 | Chevrolet | Camaro |
| 2 | Chevrolet | Captiva |
| 3 | Fiat | Mirafiori |
| 4 | Fiat | 125 Centurion |
| 5 | Honda | HR-V |
| 6 | Honda | CR-X del Sol |
| 7 | Honda | CR-Z |
+-------+-----------+---------------+
importdbfromprettytableimportfrom_db_cursor# pip install prettytable
defget_data():select_query="SELECT * FROM cars"result=db.run_query(select_query)mytable=from_db_cursor(result)mytable.align="l"print(mytable)defdelete_data(model):delete_query="DELETE FROM cars WHERE model = ?"db.run_query(delete_query,(model,))
importsqlite3fromsqlite3importErrordefopen_db():try:con=sqlite3.connect('cars.db')returnconexceptErrorase:print('Error: ',e)defrun_query(sql,params='',multiple=False):withopen_db()ascon:cursor=con.cursor()try:ifmultiple:returncursor.executemany(sql,params)else:returncursor.execute(sql,params)exceptErrorase:print('Error: ',e)defcreate_schema():withopen('db/schema.sql','r')assql_file:sql_script=sql_file.read()schema_created=run_query(sql_script)ifschema_created.rowcount==-1:print("Database created successfully")if__name__=="__main__":create_schema()
1
2
3
4
5
6
7
8
9
10
+-------+-----------+---------------+
| rowid | brand | model |
+-------+-----------+---------------+
| 2 | Chevrolet | Captiva |
| 3 | Fiat | Mirafiori |
| 4 | Fiat | 125 Centurion |
| 5 | Honda | HR-V |
| 6 | Honda | CR-X del Sol |
| 7 | Honda | CR-Z |
+-------+-----------+---------------+