Python MYSQL不接受insert语句中的值

Python MYSQL不接受insert语句中的值,python,mysql,database,pickle,file-handling,Python,Mysql,Database,Pickle,File Handling,因此,我试图在MYSQL数据库表中插入值,但下面的错误不断出现。 非常感谢你的帮助 这是我编写的代码,用于从文件中输入值并将其存储在数据库表中 import mysql.connector import pickle try: connection = mysql.connector.connect(host='localhost', database='PETROL',

因此,我试图在MYSQL数据库表中插入值,但下面的错误不断出现。 非常感谢你的帮助

这是我编写的代码,用于从文件中输入值并将其存储在数据库表中

import mysql.connector
import pickle
try:
    connection = mysql.connector.connect(host='localhost',
                                         database='PETROL',
                                         user='Sarthak',
                                         password='q1w2e3r4t5')
    cursor = connection.cursor ( )
    print(connection)
    fp1 = open ("D:/Python/petrol/pdate/pdate.txt" , "rb+")
    while True :
        try :
            pdate = pickle.load (fp1)
            cursor.execute("DROP TABLE IF EXISTS DATES")
            cursor.execute("CREATE TABLE DATES (ID INT AUTO_INCREMENT PRIMARY KEY,Date DATE)")
            cursor.execute ("INSERT INTO DATES(Date) VALUES(pdate)")
            cursor.execute("SHOW TABLES")
            cursor.commit()
        except EOFError :
            fp6.close ()
except mysql.connector.Error as error:
    print("Failed to create table in MySQL: {}".format(error))
    cursor.close()
    connection.close()

以下错误不断弹出-:

Failed to create table in MySQL: 1054 (42S22): Unknown column 'pdate' in 'field list'

我不知道我写的insert语句导致了什么问题。

这样写insert语句更好
import pickle
try:
    connection = mysql.connector.connect(host='localhost',
                                         database='PETROL',
                                         user='Sarthak',
                                         password='q1w2e3r4t5')
    cursor = connection.cursor ( )
    print(connection)
    fp1 = open ("D:/Python/petrol/pdate/pdate.txt" , "rb+")
    while True :
        try :
            pdate = pickle.load (fp1)
            cursor.execute("DROP TABLE IF EXISTS DATES")
            cursor.execute("CREATE TABLE DATES (ID INT AUTO_INCREMENT PRIMARY KEY,Date DATE)")
            query = "INSERT INTO DATES(`Date`) VALUES(%s)"
            cursor.execute (query, pdate)
            cursor.execute("SHOW TABLES")
            connection.commit() #use connection.commit instead of cursor.commit
        except EOFError :
            fp6.close ()
except mysql.connector.Error as error:
    print("Failed to create table in MySQL: {}".format(error))
    cursor.close()
    connection.close()```

query=“插入日期(`Date`)值(%s)”cursor.execute(查询,pdate)
pdate
是一个变量,cursor.execute(“插入日期(日期)值('“+pdate+”)”)。但是,您应该使用参数化查询或至少清理
pdate
,这样您就不会得到sql注入漏洞。驱动程序无法访问您的局部变量,因此它不知道您希望使用局部变量
pdate
来代替
pdate
。它只看到它有一个列引用,但没有这样的列可用。阅读@Geoffrey Good中的参数化查询,您警告不要使用SQL注入,但请不要演示易受SQL注入攻击的解决方案。显示正确的解决方案或不显示解决方案,但请不要显示不安全的解决方案。@MarkRotterVeel注释不是解决方案/答案。我展示了一个代码示例,它尽可能简单地显示了无法理解字符串如何工作,因为这是一个不特定于SQL的基本概念。仍然是一个错误,如:1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行“?)”附近使用的正确语法,该行“继续弹出@markrotVeel”。我使用了链接中给出的方法。这是如何修复的
pdate
是一个变量,它不会神奇地在常量字符串中被替换…我已经尝试过这个解决方案,但它对我没有用。谢谢anyway@SarthakKashyap为什么不打印“pdate”以查看它是否符合MySQL日期格式()。如果不这样做,您将不断收到错误。在MySQL中,日期类型的行为不像VARCHAR。如果您仍然觉得它很有挑战性,您可以将日期变量类型转换为VARCHAR(如果它不会破坏您的结构,或者更准确地说,ISO 8601()这个答案似乎是正确的,但格式不好,缺少了关于为什么以及它在做什么的解释。很抱歉,格式设置和适当解释的遗漏。只要“pdate”保留双引号,python就很难将其视为变量,如果它没有发布到日期类型列中,就不会有任何错误这是一个错误,但在数据库表的该行中找到的将是字符串“pdate”,而不是日期。要解决此问题,需要使用带有参数(即%s)的sql语句。将沿着任何参数执行查询(这将接收多种数据类型).f-string sql语句还提供了一个将pdate作为变量传递的机会,如下所示:
cursor.execute(f“INSERT INTO DATES(Date)VALUES({pdate})”)
,但我没有尝试过。请更新您的答案,不要将其作为注释发布