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.