web-dev-qa-db-fra.com

SELECT * dans SQLAlchemy?

Est-il possible de faire SELECT * dans SQLAlchemy?

Plus précisément, SELECT * WHERE foo=1?

24
mike

Personne ne ressent aujourd'hui l'amour ORM de SQLALchemy? Les réponses présentées décrivent correctement l'interface de niveau inférieur fournie par SQLAlchemy. Juste pour être complet, c'est la situation la plus probable (pour moi) dans le monde réel où vous avez une instance de session et une classe User qui est orm mappée à la table users.

for user in session.query(User).filter_by(name='jack'):
     print user
     # ...

Et cela fait une sélection explicite sur toutes les colonnes.

35
Ali Afshar

La sélection suivante fonctionne pour moi dans le langage d'expression de base (renvoyant un objet RowProxy ):

foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)
26
Ryne Everett

Bar est la classe mappée à votre table et session est votre session sa:

bars = session.query(Bar).filter(Bar.foo == 1)
9
adam

Si vous ne listez aucune colonne, vous les obtenez toutes.

query = users.select()
query = query.where(users.c.name=='jack')
result = conn.execute(query)
for row in result:
    print row

Devrait marcher.

7
S.Lott

Vous pouvez toujours utiliser un SQL brut aussi:

str_sql = sql.text("YOUR STRING SQL")
#if you have some args:
args = {
    'myarg1': yourarg1
    'myarg2': yourarg2}
#then call the execute method from your connection
results = conn.execute(str_sql,args).fetchall()
5

Pour les jointures si les colonnes ne sont pas définies manuellement, seules les colonnes de la table cible sont renvoyées. Pour obtenir toutes les colonnes pour les jointures (table utilisateur jointe avec table de groupe:

sql = User.select(from_obj(Group, User.c.group_id == Group.c.id))
# Add all coumns of Group table to select
sql = sql.column(Group)
session.connection().execute(sql)
4
derkan

Il s'avère que vous pouvez faire:

sa.select('*', ...)
2
mike

Si vous utilisez l'ORM, vous pouvez créer une requête en utilisant les constructions ORM normales, puis l'exécuter directement pour obtenir les valeurs de colonne brutes:

query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
    print cols
1
Mu Mind