1.數據插入的時候報錯:not enough arguments for format string,大概意思就是說沒有足夠的參數格式化字符串。
我的數據庫插入方法是這樣的
def add_data(self,data_dic):
tables = 'user'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables} ({keys}) VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}='{v}'" for k,v in data_dic.items()])
sql += update
try:
if self.cursor.execute(sql, tuple(data_dic.values())):
print('ok')
self.conn.commit()
except Exception as e:
print(e.args)
self.conn.rollback()
self.conn.close()
通過調試我得知程序在執行cursor.execute的時候報了該錯誤。
為了進一步了解原因,我找到了關於實現execute的方法:
def mogrify(self, query, args=None):
"""
Returns the exact string that is sent to the database by calling the
execute() method.
This method follows the extension to the DB API 2.0 followed by Psycopg.
"""
conn = self._get_db()
if PY2: # Use bytes on Python 2 always
query = self._ensure_bytes(query, encoding=conn.encoding)
if args is not None:
query = query % self._escape_args(args, conn)
return query
通過上面的方法可以的得知,關鍵的一句話是
query = query % self._escape_args(args, conn)
我要插入最后一個字段中有其中一段文字
廚房和體育健身用品等進口關稅平均稅率由 15.9%降至7.2%
因為%的原因出錯了,所以我嘗試這把上面方法修改成下面的方式 使用format去格式化字符串
def add_data(self,data_dic):
tables = 'user'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql ='INSERT INTO {tables} ({keys}) VALUES({values}) ON DUPLICATE KEY UPDATE '.format(tables=tables,keys=keys,values=values)
update = ','.join(["{key}=%s".format(key=key) for key in data_dic])
sql += update
try:
if self.cursor.execute(sql,tuple(data_dic.values())*2):
print('ok')
self.conn.commit()
except Exception as e:
print(e.args)
self.conn.rollback()
self.conn.close()
