[英]python, mysql, inserting string into table, error 1054
我遇到了問題 OperationalError: (1054, "Unknown column 'Ellie' in 'field list'") 使用下面的代碼,我試圖將數據從 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()
READ FILE - 這會調用上面的 populate 方法
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))
(請注意,值(a,b,c)
作為第二個參數傳遞給函數execute
,而不是通過字符串插值作為第一個參數的一部分)。 MySQLdb 將為您正確引用參數。
附注。 正如 Vajk Hermecz 所指出的,問題的出現是因為字符串'Ellie'
沒有被正確引用。
當您使用"(%s,)" % (a,)
進行字符串插值時"(%s,)" % (a,)
您會得到(Ellie,)
而您真正想要的是('Ellie',)
。 但是不要費心自己引用。 使用參數化 SQL 更安全、更容易。
你的問題是你在沒有任何轉義的情況下將值添加到查詢中......現在它只是壞了。 你可以這樣做:
cursor.execute("INSERT INTO User(user_id,username,user) VALUES(\"%s\",\"%s\",\"%s\")"%(a,b,c))
但這只會在您的代碼中引入 SQL INJECTION。
切勿使用串聯查詢和數據構造 SQL 語句。 您的參數化查詢...
這里的正確解決方案是:
cursor.execute("INSERT INTO User(user_id,username,user) VALUES(%s,%s,%s)", (a,b,c))
所以,你的代碼的問題是你使用了%
操作符來格式化字符串,最后你只給了一個參數cursor.execute
。 現在正確的解決方案是,不是自己進行字符串格式化,而是在第一個參數中將查詢部分提供給cursor.execute
,並在第二個參數中為元組提供參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.