我無法理解如何執行查詢來檢查並查看sqlalchemy中是否存在匹配的記錄。我可以在網上找到的大多數例子似乎都引用了我沒有的「會話」和「查詢」對象。執行sqlalchemy存在查詢
下面是一個簡短的完整程序,說明我的問題:
1.設置帶有「人員」表的內存sqlite數據庫。
2.將兩條記錄插入到人員表中。
3.檢查表中是否存在特定的記錄。這是它的地方。
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.sql.expression import exists
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
person = Table('person', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(255), nullable=False))
metadata.create_all(engine)
conn = engine.connect()
s = person.insert()
conn.execute(s, name="Alice")
conn.execute(s, name="Bob")
print("I can see the names in the table:")
s = person.select()
result = conn.execute(s)
print(result.fetchall())
print('This query looks like it should check to see if a matching record exists:')
s = person.select().where(person.c.name == "Bob")
s = exists(s)
print(s)
print("But it doesn't run...")
result = conn.execute(s)
該程序的輸出是:
I can see the names in the table:
[(1, 'Alice'), (2, 'Bob')]
This query looks like it should check to see if a matching record exists:
EXISTS (SELECT person.id, person.name
FROM person
WHERE person.name = :name_1)
But it doesn't run...
Traceback (most recent call last):
File "/project_path/db_test/db_test_env/exists_example.py", line 30, in <module>
result = conn.execute(s)
File "/project_path/db_test/db_test_env/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 945, in execute
return meth(self, multiparams, params)
File "/project_path/db_test/db_test_env/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 265, in _execute_on_connection
raise exc.ObjectNotExecutableError(self)
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: <sqlalchemy.sql.selectable.Exists object at 0x105797438>
謝謝!這正是我想要的!我非常親密,我無法弄清楚如何包裝這個額外的選擇。謝謝。 我可能做的只是很小的變化: 'result = conn.execute(s).scalar()' 所以我們只取回基本的True/False而不是結果行。 –