He creado un módulo de Python que crea y completa varias tablas SQLite. Ahora, quiero usarlo en un progtwig pero no sé cómo llamarlo correctamente. Todos los tutoriales que he encontrado son esencialmente “en línea”, es decir, explican el uso de SQLite de forma lineal en lugar de cómo usarlo realmente en producción.
Lo que estoy tratando de hacer es tener una verificación de método para ver si la base de datos ya está creada. Si es así, entonces puedo usarlo. Si no, se genera una excepción y el progtwig creará la base de datos. (O use las declaraciones if / else, lo que sea mejor).
Creé un script de prueba para ver si mi lógica es correcta pero no funciona. Cuando creo la statement de prueba, solo crea una nueva base de datos en lugar de verificar si ya existe una. La próxima vez que ejecute el script, aparece un error que indica que la tabla ya existe, incluso si intenté capturar la excepción. (No he usado try / excepto antes, pero pensé que este es un buen momento para aprender).
¿Hay buenos tutoriales para usar SQLite operacionalmente o alguna sugerencia sobre cómo codificar esto? He revisado el tutorial de pysqlite y otros que encontré pero no abordan esto.
AFAIK una base de datos SQLITE es solo un archivo. Para verificar si la base de datos existe, verifique la existencia del archivo.
Cuando abre una base de datos SQLITE, creará una automáticamente si el archivo que la respalda no está en su lugar.
Si intenta abrir un archivo como una base de datos sqlite3 que NO es una base de datos, obtendrá esto:
“sqlite3.DatabaseError: el archivo está cifrado o no es una base de datos”
así que compruebe si el archivo existe y asegúrese de intentar detectar la excepción en caso de que el archivo no sea una base de datos sqlite3
SQLite crea automáticamente el archivo de base de datos la primera vez que intenta usarlo. Las sentencias de SQL para crear tablas pueden usar IF NOT EXISTS
para que los comandos solo tengan efecto si la tabla no se ha creado. De esta manera, no es necesario verificar de antemano la existencia de la base de datos: SQLite puede encargarse de eso por usted.
Lo más importante de lo que aún estaría preocupado es que la ejecución de CREATE TABLE IF EXISTS
para cada transacción web (por ejemplo) sería ineficiente; puede evitar que el progtwig mantenga una variable (en memoria) que indique si ha creado la base de datos hoy, por lo que ejecuta el script CREATE TABLE
una vez por ejecución. Esto todavía le permitirá eliminar la base de datos y comenzar de nuevo durante la depuración.
Como @diciu señaló, el archivo de base de datos será creado por sqlite3.connect . Si desea realizar una acción especial cuando el archivo no está allí, deberá verificar explícitamente la existencia:
import os import sqlite3 if not os.path.exists(mydb_path): #create new DB, create table stocks con = sqlite3.connect(mydb_path) con.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''') else: #use existing DB con = sqlite3.connect(mydb_path) ...
import sqlite3 import os database_name = "newdb.db" if not os.path.isfile(database_name): print "the database already exist" db_connection = sqlite3.connect(database_name) db_cursor = db_connection.cursor() try: db_cursor.execute('CREATE TABLE TEST (a INTEGER);') except sqlite3.OperationalError, msg: print msg
Hacer SQL en general es horrible en cualquier idioma que haya aprendido. SQLalchemy ha demostrado ser más fácil de usar porque la consulta y el compromiso reales son muy claros y están exentos de problemas.
Aquí hay algunos pasos básicos para utilizar realmente sqlalchemy en su aplicación, puede encontrar mejores detalles en la documentación.
Después de crear una sesión, puede confirmar y consultar desde la base de datos.
Vea esta solución en SourceForge que cubre su pregunta de manera tutorial, con un código fuente instructivo:
y_serial.py module :: warehouse objetos de Python con SQLite
“Serialización + persistencia :: en unas pocas líneas de código, comprima y anote los objetos de Python en SQLite; luego, recupérelos cronológicamente mediante palabras clave sin ningún tipo de SQL. El módulo” estándar “más útil para que una base de datos almacene datos sin esquema”.
Sí, estaba saciando el problema. Todo lo que tenía que hacer era buscar el archivo y detectar el error IOError si no existía.
Gracias por todas las otras respuestas. Pueden ser útiles en el futuro.