python,mysql,在表中插入字符串,错误1054

python,mysql,在表中插入字符串,错误1054,python,mysql,string,insert,mysql-error-1054,Python,Mysql,String,Insert,Mysql Error 1054,我有这个问题 操作错误:1054,“字段列表”中的未知列“Ellie” 使用下面的代码,我试图将json中的数据插入到我的sql数据库中。每当我尝试插入一个字符串时就会出现这个问题,在这种情况下,Ellie,这与字符串插值有关,我想,但我无法让它工作,尽管我尝试了我在这里看到的一些其他解决方案 创建表 con = MySQLdb.connect('localhost','root','','tweetsdb01') cursor = con.cursor() cursor.execute("CR

我有这个问题 操作错误:1054,“字段列表”中的未知列“Ellie” 使用下面的代码,我试图将json中的数据插入到我的sql数据库中。每当我尝试插入一个字符串时就会出现这个问题,在这种情况下,Ellie,这与字符串插值有关,我想,但我无法让它工作,尽管我尝试了我在这里看到的一些其他解决方案

创建表

con = MySQLdb.connect('localhost','root','','tweetsdb01')
cursor = con.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS User(user_id BIGINT NOT NULL PRIMARY KEY, username varchar(25) NOT NULL,user varchar(25) NOT NULL) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB")
con.commit() 
插入

def populate_user(a,b,c):
    con = MySQLdb.connect('localhost','root','','tweetsdb01')
    cursor = con.cursor()
    cursor.execute("INSERT INTO User(user_id,username,user) VALUES(%s,%s,%s)"%(a,b,c))
    con.commit() 
    cursor.close() 
读取文件-这将调用上面的填充方法

def read(file):
    json_data=open(file)
    tweets = []
    for i in range(10):
        tweet = json.loads(json_data.readline())

    populate_user(tweet['from_user_id'],tweet['from_user_name'],tweet['from_user'])

您的问题是将值添加到查询中而没有任何转义。。。。现在它只是坏了。你可以这样做:

cursor.execute("INSERT INTO User(user_id,username,user) VALUES(\"%s\",\"%s\",\"%s\")"%(a,b,c))
但这只会在代码中引入SQL注入

永远不要用连接查询和数据来构造SQL语句。您的参数化查询

适当的解决办法是:

cursor.execute("INSERT INTO User(user_id,username,user) VALUES(%s,%s,%s)", (a,b,c))

因此,代码的问题是您使用了%运算符来进行字符串格式化,最后您只给cursor.execute一个参数。现在,正确的解决方案是,不用自己进行字符串格式化,而是在第一个参数中将查询部分指定给cursor.execute,并在第二个参数中为元组提供参数。

您的问题是将值添加到查询中而没有任何转义。。。。现在它只是坏了。你可以这样做:

cursor.execute("INSERT INTO User(user_id,username,user) VALUES(\"%s\",\"%s\",\"%s\")"%(a,b,c))
但这只会在代码中引入SQL注入

永远不要用连接查询和数据来构造SQL语句。您的参数化查询

适当的解决办法是:

cursor.execute("INSERT INTO User(user_id,username,user) VALUES(%s,%s,%s)", (a,b,c))
因此,代码的问题是您使用了%运算符来进行字符串格式化,最后您只给cursor.execute一个参数。现在,正确的解决方案是,不用自己进行字符串格式化,而是在第一个参数中将查询部分指定给cursor.execute,并在第二个参数中为元组提供参数。

:

请注意,值a、b、c作为第二个参数传递给函数execute,而不是通过字符串插值作为第一个参数的一部分。MySQLdb将为您正确引用这些参数

注:正如Vajk Hermecz所指出的,出现问题的原因是字符串“Ellie”没有被正确引用

使用%s进行字符串插值时,%a Ellie,而你真正想要的是“Ellie”,。但是不要费心自己引用。使用参数化SQL更安全、更容易。

:

请注意,值a、b、c作为第二个参数传递给函数execute,而不是通过字符串插值作为第一个参数的一部分。MySQLdb将为您正确引用这些参数

注:正如Vajk Hermecz所指出的,出现问题的原因是字符串“Ellie”没有被正确引用

使用%s进行字符串插值时,%a
Ellie,而你真正想要的是“Ellie”,。但是不要费心自己引用。使用参数化SQL更安全、更容易。

好的,谢谢!我还遇到了utf编码问题。。我想这两个问题在这个新领域对我来说,同时让我疯狂!!如果我的mysql中有int、date和其他类型怎么办?%好的,谢谢!我还遇到了utf编码问题。。我想这两个问题在这个新领域对我来说,同时让我疯狂!!如果我的mysql中有int、date和其他类型怎么办?%如果是光标,则表示在打开时出错。在cursor select语句where子句中,它需要数字值,但您传递了字符值。如果它是游标,则在打开期间表示错误。在游标select语句where子句中,它需要数值,但传递了字符值。