3
我創建了一個功能,用於創建表達如何在sqlalchemy中創建基於字面值的查詢?
def test(operator1, operation, operator2):
return literal_column(operator1).op(operation)(operator2)
現在,當我把它與
test(1, '=', 1)
然後它
但是當我通過
test('abc', '=', 'abc')
然後它給錯誤,abc不是列。
我試圖將其轉換
def test(operator1, operation, operator2):
return literal_column(operator1, String).op(operation)(operator2)
但是,這是行不通的。
如果我
test("'abc'", '=', 'abc')
調用這工作有什麼辦法,得到關於基地我們可以創建literal_colum這將是地圖,相同類型的內容算子1和類型?
當我使用像bindparam綁定PARAMS(1)== bindparam(1),然後我得到'FROM用戶 其中%s =%s的(1,)== literal_column('1')我得到 ' FROM users WHERE 1 = 1 2011-09-16 10:59:49,835 INFO sqlalchemy.engine.base.Engine() ' 這將適用於整數,但對於它給出的字符串錯誤並轉換int 'FROM users WHERE abc = abc 2011-09-16 10:59:49,835 INFO sqlalchemy.engine.base.Engine() ' – Nilesh
它假定您在此處使用execute()的機制使用子句構造。如果你只是在執行str(子句)然後使用它,那麼你會失去綁定參數值,但你有點超出了API的常規使用模式。如果你想使用literal_column和字符串,你必須安全地引用它。我建議不要這樣做,我會盡可能地堅持http://www.sqlalchemy.org/docs/core/tutorial.html中的模式。 – zzzeek
Thx爲您提供幫助。如果有任何更好的想法,請發佈。我將用字符串變量添加引號。 :) – Nilesh