python mysql插入數據遇到的錯誤


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()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM