我有一個 python 燒瓶應用程式,它主要使用 sqlalchemy 來執行它的所有 mySQL 查詢,我需要使用本地資料庫為它撰寫測驗并運行。
經過簡短的研究,我為此任務選擇的資料庫是本地 sqlite3 資料庫,主要是因為我讀到它與 mySQL 和 sqlalchemy 非常兼容,而且還因為它易于設定和拆卸。我已經成功建立了與它的連接,并設法創建了測驗所需的所有表。
我在嘗試執行一些查詢時遇到了一個問題,其中查詢陳述句被構建為 sqlalchemy TextClause 物件,并且我的 sqlite3 連接游標在嘗試執行陳述句時引發以下例外:
TypeError: argument 1 must be str, not TextClause
如何將此 TextClause 物件動態轉換為字串并執行它?我不想僅僅為了測驗而對代碼進行重大更改。
代碼示例:員工表:
| ID | 姓名 |
|---|---|
| 1 | 杰夫·貝索斯 |
| 2 | 比爾蓋茨 |
from sqlalchemy import text
import sqlite3
def select_employee_by_id(id: int):
employees_table = 'employees'
db = sqlite3.connect(":memory:")
cursor = db.cursor()
with db as session:
statement = text("""
SELECT *
FROM {employees_table}
WHERE
id = :id
""".format(employees_table=employees_table)
).bindparams(id=id)
data = cursor.execute(statement)
return data.fetchone()
應該為 select_employee_by_id(1) 回傳包含 {'id': 1, 'name': 'Jeff Bezos'} 的行
提前致謝!
uj5u.com熱心網友回復:
如果你想測驗你的TextClause查詢,那么你應該使用 SQLAlchemy 來執行它,而不是使用 DBAPI (SQLite) 游標:
from sqlalchemy import create_engine, text
def select_employee_by_id(id: int):
employees_table = 'employees'
engine = create_engine("sqlite://")
with engine.begin() as conn:
statement = text("""
SELECT *
FROM {employees_table}
WHERE
id = :id
""".format(employees_table=employees_table)
).bindparams(id=id)
data = conn.execute(statement)
return data.one()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485343.html
