web-dev-qa-db-ja.com

SQLAlchemyのSELECT *

SELECT * in SQLAlchemy?

具体的には、SELECT * WHERE foo=1

24
mike

今日、SQLALchemyに対するORMの愛情を感じている人はいませんか?提示された回答は、SQLAlchemyが提供する下位レベルのインターフェースを正しく説明しています。完全を期すため、これはより可能性の高い(for me)実際の状況であり、セッションインスタンスと、usersテーブルにormマップされたUserクラスがあります。

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

そして、これはすべての列に対して明示的な選択を行います。

35
Ali Afshar

次の選択は、コア式言語で動作します( RowProxyオブジェクト を返します)。

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

ここで、Barはテーブルにマップされたクラスであり、sessionはsaセッションです:

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

列を指定しないと、すべての列が取得されます。

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

うまくいくはずです。

7
S.Lott

いつでも生のSQLを使用することもできます。

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()

結合の場合、列が手動で定義されていなければ、ターゲットテーブルの列のみが返されます。結合のすべての列を取得するには(グループテーブルに結合されたユーザーテーブル:

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

あなたができることがわかりました:

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

ORMを使用している場合は、通常のORM構造を使用してクエリを作成し、直接実行して生の列の値を取得できます。

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