MySQL數據庫INSERT INTO語句帶參數報錯


使用MySQL的插入語句時,忽然發現,插入非數字的參數時,數據庫會報錯

mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column '2ddd22' in 'field list'

cloumn后面為要插入的參數

import mysql.connector
 
class MysqlGroup(object):
    def __init__(self,host,user,password,database,charset):
        self.mydb=mysql.connector.connect(host = host,user = user,port = 3306,password = password,database = database,charset = charset,buffered = True)
        self.mycursor=self.mydb.cursor(buffered = True)
    
    def mysql_increase(self, surface_name, column_name1, column_name2, parameter1, parameter2):  
        self.mycursor.execute(
            "INSERT INTO %s (%s, %s) VALUES (%s, %s)" % (surface_name,column_name1, column_name2, parameter1, parameter2))
        self.mydb.commit()
 
                               
con1 = MysqlGroup('數據庫地址', '數據庫用戶名', '數據庫密碼', '數據庫名', '編碼方式')    
jk = con1.mysql_increase('data','user', 'password','2ddd22','3333')

報錯原因,數據庫錯誤的把要插入的值識別為列名

解決辦法在SQL語句中的要插入的值兩邊加上單引號',代碼如圖

import mysql.connector

class MysqlGroup(object):
def __init__(self,host,user,password,database,charset):
self.mydb=mysql.connector.connect(host = host,user = user,port = 3306,password = password,database = database,charset = charset,buffered = True)
self.mycursor=self.mydb.cursor(buffered = True)

def mysql_increase(self, surface_name, column_name1, column_name2, parameter1, parameter2):
self.mycursor.execute(
"INSERT INTO %s (%s, %s) VALUES ('%s', '%s')" % (surface_name,column_name1, column_name2, parameter1, parameter2))
self.mydb.commit()


con1 = MysqlGroup('數據庫地址', '數據庫用戶名', '數據庫密碼', '數據庫名', '編碼方式')
jk = con1.mysql_increase('data','user', 'password','2ddd22','3333')

缺點,加了單引號之后,SQL語句就無法識別參數Null之類的關鍵字,會將其當做字符處理。使用關鍵字需要直接寫入SQL語句。如

import mysql.connector

class MysqlGroup(object):
def __init__(self,host,user,password,database,charset):
self.mydb=mysql.connector.connect(host = host,user = user,port = 3306,password = password,database = database,charset = charset,buffered = True)
self.mycursor=self.mydb.cursor(buffered = True)

def mysql_insert_null(self, surface_name, column_name1, column_name2):
self.mycursor.execute(
"INSERT INTO %s (%s, %s) VALUES (Null, Null)" % (surface_name,column_name1, column_name2))
self.mydb.commit()


con1 = MysqlGroup('數據庫地址', '數據庫用戶名', '數據庫密碼', '數據庫名', '編碼方式')
jk = con1.mysql_increase('data','user', 'password')

往data表中user列和password列插入空值


免責聲明!

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



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