簡體   English   中英

python,mysql,將字符串插入表中,錯誤 1054

[英]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'])

使用參數化 SQL

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM