update query example create python-2.7 sqlalchemy database-connection pyramid

python 2.7 - query - Administrador de conexión de base de datos para Pyramid usando SQLAlchemy mínimo



sqlalchemy postgresql example (2)

Hice un proyecto de inicio (pcreate -s starter myproject) en Pyramid. ¿Cómo puedo hacer que la conexión a la base de datos esté disponible para mi aplicación cuando sea necesario?

Miré aquí: Suscripción de la base de datos de Conenction .

A continuación está el código:

@subscriber(NewRequest) def new_request_subscriber(event): request = event.request settings = request.registry.settings request.db = sqlite3.connect(settings[''db'']) request.add_finished_callback(close_db_connection) def close_db_connection(request): request.db.close()

Me preocupa el rendimiento ya que hará una conexión de base de datos para cada solicitud, lo usemos o no o no.

¿Está bien o debería hacerlo de alguna otra forma? ¿Cómo puedo usar sqlalchemy (de una manera mínima, puede haber de 10 a 15 líneas de código) y hacerlo mejor?

Nota: No quiero usar sqlalchemy orm (curva de aprendizaje profunda). Por lo tanto evité (pcreate -s alquimia MyProject)


SQLAlchemy resuelve bastantes problemas que está a punto de descubrir si decide hacer todo usted mismo :) Al igual que la agrupación de conexiones, la gestión de transacciones, las sesiones locales de subprocesos, etc.

Si no desea utilizar la parte ORM de SQLAlchemy y prefiere usar SQL literal en todas partes (digamos hola a la inyección SQL cuando lo encuentre), puede hacer algo como:

result = session.execute("""SELECT spam, eggs FROM blah WHERE moo=''foo''""") for row in result: print "spam = %s" % row.spam print "eggs = %s" % row.eggs

Simplemente comenzaría con una aplicación creada a partir de la plantilla "Alchemy" y eliminaría las partes que no iba a usar. Que probablemente sean solo la definición de MyModel en models.py y la vista de muestra en views.py .


Puede usar config.add_request_method () para hacer lo que necesita:

def db_connect(request) def db_close(request): if conn is not None: conn.close() conn = sqlite3.connect(request.registry.settings[''db'']) request.add_finished_callback(db_close) return conn config.add_request_method(db_connect, ''db'', reify=True)

Lo que hace es que cuando usa ''request.db'' en su código, llamará a la función db_connect () para obtener la conexión, reify = True significa que solo llamará a la función una vez para obtener la conexión. Y add_finished_callback () llamará a la función db_close () para cerrar la conexión.

De esta forma, la conexión de la base de datos de la consola solo se inicializará solo cuando use request.db, y se cerrará cuando se inicialice una conexión.