SELECT *
SQLAlchemyで行うことは可能ですか?
具体的には、SELECT * WHERE foo=1
?
今日、SQLALchemy の ORM への愛情を感じている人はいないのでしょうか? 提示された回答は、SQLAlchemy が提供する下位レベルのインターフェイスを正しく説明しています。完全を期すために、これは、ユーザー テーブルに orm マップされたセッション インスタンスとユーザー クラスがある(私にとっては)より現実的な状況です。
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)
列をリストしない場合は、すべての列が取得されます。
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()
Barはテーブルにマップされたクラスで、sessionは sa セッションです。
bars = session.query(Bar).filter(Bar.foo == 1)
あなたができることがわかりました:
sa.select('*', ...)
列が手動で定義されていない場合の結合では、ターゲット テーブルの列のみが返されます。結合のすべての列を取得するには (グループ テーブルと結合されたユーザー テーブル:
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)
ORM を使用している場合は、通常の ORM コンストラクトを使用してクエリを作成し、それを直接実行して生の列値を取得できます。
query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
print cols