我刚开始学习Python(从我的代码你可以看出来),我基本上写了一个示例脚本来测试一些核心命令,以便更好地理解它们的工作原理。除了最后一个“insert”命令之外,我已经将所有东西都运行得很好 - 经过数小时的谷歌和实验,我无法弄清楚哪里有问题,所以如果有人能向我展示需要更改什么并帮助我理解为什么(我确信这是基础知识,但我被卡住了!),我会非常感激。
下面是让我困扰的那一行:
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
很抱歉,我只能用英语回答您的问题。如果您有任何需要翻译的内容,请告诉我,我会尽力帮助您。
import sqlite3
sqlite_file = '/test_database.sqlite' # name of the sqlite database file
table_name = 'test_table'
column1 = 'my_1st_column'
column2 = 'my_2nd_column'
column3 = 'my_3rd_column'
column4 = 'my_4th_column'
ID = int(123456)
Base = 'Arnold'
Snu = 'test'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
c.execute("UPDATE {tn} SET {cn2}=('Snu'), {cn3}=('Muh'), {cn4}=('Arnold_A') WHERE {cn1}=({NID})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, NID=ID))
i = 1
while(i<15):
if i == 1: IN = 'B'
if i == 2: IN = 'C'
if i == 3: IN = 'D'
if i == 4: IN = 'E'
if i == 5: IN = 'F'
if i == 6: IN = 'G'
if i == 7: IN = 'H'
if i == 8: IN = 'I'
if i == 9: IN = 'J'
ID = ID+1
i = i+1
Name = Base + '_' + IN
params = (Snu, IN, Name)
c.execute("INSERT OR IGNORE INTO {tn} ({cn1}, {cn2}, {cn3}, {cn4}) VALUES ({VID}, {VSnu}, {VIN}, {VName})".\
format(tn=table_name, cn1=column1, cn2=column2, cn3=column3, cn4=column4, VID=ID, VSnu=Snu, VIN=IN, VName=Name))
if(i == 10): break
conn.commit()
conn.close()
它可以成功地写入“VID”项(它是一个整数列和表的主键),但是在此之后,它将一切解释为列,并出现“没有这样的列:[值]”错误。无论在“VID”之后出现什么(如上面的命令中演示的任何变量),或者如果我尝试插入一个直接的字符串值,我都会遇到此错误。这些其他列只是文本列,如果有帮助的话。
'{Vsnu}'
或{'Vsnu'}
-> SQL中的字符串字面量需要用单引号括起来。您应该真的研究一下使用查询参数的价值。 - Mark Benningfield