[英]Multiple string interpolation in Python
我正在嘗試構建一個SQL查詢,它涉及同一個字符串的兩個單獨插入,它本身是通過用逗號連接列表(術語)來構造的。 我這樣做如下:
format_strings = ','.join(['%s'] * len(terms))
sql = """
SELECT i.id, i.title, i.description, MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score
FROM items i
WHERE MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score""" % format_strings, (terms, terms)
結果是TypeError: not enough arguments for format string
這只適用於術語的一種用法,但不是一秒鍾。 我是Python的新手,所以這可能非常簡單。 任何幫助非常感謝!
編輯:術語來自在包含空格的字符串上運行.split(),因此('apples', 'oranges')
將是一個示例值。
更新 :
以下結果導致SQL錯誤,但它確實看起來像字符串沒有被替換(%s出現在SQL中):
terms = term.split()
format_strings = ','.join(['%s'] * len(terms))
sql = """SELECT i.id, i.title, i.description, MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score
FROM items i
WHERE MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE)""" % (format_strings, (terms, terms))
cursor.execute(sql)
輸出:
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s IN NATURAL LANGUAGE MODE) AS score\tFROM items i\tWHERE MATCH (i.title, i.descr' at line 1")
在格式化查詢時,您需要傳遞format_strings
兩個實例,或者更好的是,使用str.format()
並引用兩次參數:
sql = """
SELECT i.id, i.title, i.description, MATCH (i.title, i.description)
AGAINST ({0} IN NATURAL LANGUAGE MODE) AS score
FROM items i
WHERE MATCH (i.title, i.description) AGAINST ({0} IN NATURAL LANGUAGE MODE)
AS score""".format(format_strings)
然后將參數傳遞給cursor.execute()
:
cursor.execute(sql, terms*2)
你可以按如下方式准備你的sql:
format_strings = ','.join(['%s'] * len(terms))
sql = """SELECT i.id, i.title, i.description, MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score FROM items i WHERE MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score""" % (format_strings, format_strings)
#Execute the sql in your database cursor
db_cursor.execute(sql,[terms,terms])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.