簡體   English   中英

形成SQL查詢的問題。 蟒蛇,pymysql

[英]The problem with the formation of SQL queries. Python, pymysql

我想將機器人數據庫從 SQLite 更改為 MySQL (pymysql) 並遇到了問題。

我有一個生成 sql 查詢的函數,但由於某種原因它停止工作:

def update_format_with_args(sql, parameters: dict):
values = ", ".join([
    f"{item} = ?" for item in parameters
])
sql = sql.replace("XXX", values)
return sql, tuple(parameters.values())

def update_settingsx(**kwargs):
with connection.cursor() as db:
    sql = f"UPDATE main_settings SET XXX "
    sql, parameters = update_format_with_args(sql, kwargs)
    db.execute(sql, parameters)
    db.commit()

錯誤:

 update_settingsx(profit_buy=now_unix)
   File "/root/rent/bot_id/utils/db_api/sqlite.py", line 154, in update_settingsx
     db.execute(sql, parameters)
   File "/usr/local/lib/python3.7/dist-packages/pymysql/cursors.py", line 168, in execute
     query = self.mogrify(query, args)
   File "/usr/local/lib/python3.7/dist-packages/pymysql/cursors.py", line 147, in mogrify
     query = query % self._escape_args(args, conn)
 TypeError: not all arguments converted during string formatting

不是每個數據庫連接器都支持? 替代方案。 Pymysql 使用%s代替。

另一種選擇是使用命名替換:

def update_format_with_args(sql, parameters: dict):
    values = ", ".join([
        f"{item} = %({item})s" for item in parameters
    ])
    sql = sql.replace("XXX", values)
    return sql, parameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM