SELECT *
in SQLAlchemy?
具体的には、SELECT * WHERE foo=1
?
今日、SQLALchemyに対するORMの愛情を感じている人はいませんか?提示された回答は、SQLAlchemyが提供する下位レベルのインターフェースを正しく説明しています。完全を期すため、これはより可能性の高い(for me)実際の状況であり、セッションインスタンスと、usersテーブルにormマップされたUserクラスがあります。
for user in session.query(User).filter_by(name='jack'):
print user
# ...
そして、これはすべての列に対して明示的な選択を行います。
次の選択は、コア式言語で動作します( RowProxyオブジェクト を返します)。
foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)
ここで、Barはテーブルにマップされたクラスであり、sessionはsaセッションです:
bars = session.query(Bar).filter(Bar.foo == 1)
列を指定しないと、すべての列が取得されます。
query = users.select()
query = query.where(users.c.name=='jack')
result = conn.execute(query)
for row in result:
print row
うまくいくはずです。
いつでも生の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)
あなたができることがわかりました:
sa.select('*', ...)
ORMを使用している場合は、通常のORM構造を使用してクエリを作成し、直接実行して生の列の値を取得できます。
query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
print cols