43

SELECT *SQLAlchemyで行うことは可能ですか?

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

4

11 に答える 11

47

今日、SQLALchemy の ORM への愛情を感じている人はいないのでしょうか? 提示された回答は、SQLAlchemy が提供する下位レベルのインターフェイスを正しく説明しています。完全を期すために、これは、ユーザー テーブルに orm マップされたセッション インスタンスとユーザー クラスがある(私にとっては)より現実的な状況です。

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

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

于 2009-03-11T22:27:31.703 に答える
33

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

foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)
于 2014-04-22T19:48:44.950 に答える
11

列をリストしない場合は、すべての列が取得されます。

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

動作するはずです。

于 2009-03-11T22:05:48.697 に答える
10

生の 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()
于 2013-04-17T15:56:37.200 に答える
9

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

bars = session.query(Bar).filter(Bar.foo == 1)
于 2009-03-11T23:02:32.163 に答える
7

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

sa.select('*', ...)
于 2009-03-11T22:13:53.733 に答える
4

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

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)
于 2013-10-22T10:05:49.480 に答える
3

ORM を使用している場合は、通常の ORM コンストラクトを使用してクエリを作成し、それを直接実行して生の列値を取得できます。

query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
    print cols
于 2012-09-28T01:50:06.950 に答える