2011-03-08 10 views
9

¿Puedo usar el ORM-Mapper SqlAlchemy para generar solo el código SQL?(solo) generar código SQL con SqlAlchemy

Con tablas simples que pueda usar un código como

print users_table.select() 
print users_table.insert() 
print users_table.update() 
print users_table.delete() 

Pero con el ORM sólo he encontrado una manera para ciertos estados de cuenta:

TestUser = User("John", "Doe") 
print session.query(User) 

¿Cómo puedo generar el código SQL para INSERT/ACTUALIZAR/ELIMINAR (sin realmente manipular la base de datos)?

Gracias.

Respuesta

7

¿Quizás desea el lenguaje de expresión central SQLAlchemy, en lugar del ORM?

http://www.sqlalchemy.org/docs/core/index.html

El ORM está diseñado para ser muy fuertemente enlazado a datos, y por lo tanto a no ser realmente desvinculado de sus sesiones de DB. El lenguaje de expresión, por otro lado, puede traducirse directamente a SQL. (Sólo tomar cualquiera de los objetos resultantes y pasarlos a str() y obtendrá el equivalente SQL.)

3

Puede acceder a los objetos de tabla para una clase asignada a través de la función sqlalchemy.orm.class_mapper:


users_table = class_mapper(User).mapped_table 
users_table.insert(..) 

Si está utilizando la sintaxis declarativa, se puede hacer esto:


users_table = User.__table__ 
users_table.insert(..) 
3

es muy sencillo. Al igual que lo que haces, puede convertir la consulta como cadena

TestUser = User("John", "Doe") 
# convert querying object to string 
query_stat = str(session.query(User)) 
print query_stat 

Y aquí, el query_stat debe ser comunicado de consulta SQL.

+0

¿Qué tal si haces 'session.query (MyModel) .count()'? –

Cuestiones relacionadas