【发布时间】:2017-08-02 20:42:36
【问题描述】:
我希望这段代码创建一个表并且每次只打印一个列表,而不是打印多个(之前运行时的结果)。我如何修复此代码以使 WHERE NOT EXISTS 代码真正起作用。
我的错误是:
Traceback (most recent call last):
line 33, in <module>
data_entry()
line 14, in data_entry
c.execute("INSERT INTO myTestTable VALUES('James', 45, 'Home') WHERE NOT EXISTS (SELECT 1 FROM myTestTable WHERE name ='james' AND age =45 AND address ='school')")
sqlite3.OperationalError: near "WHERE": syntax error
代码:
import sqlite3
conn = sqlite3.connect('dbtest.db')
c = conn.cursor()
param = "School"
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS myTestTable(name TEXT, age REAL, address TEXT)')
def data_entry():
c.execute("INSERT INTO myTestTable VALUES('James', 45, 'Home') WHERE NOT EXISTS (SELECT 1 FROM myTestTable WHERE name ='james' AND age =45 AND address ='school')")
c.execute("INSERT INTO myTestTable VALUES('Jeff', 16, 'School') WHERE NOT EXISTS (SELECT 1 FROM myTestTable WHERE name ='james' AND age =45 AND address ='school')")
c.execute("INSERT INTO myTestTable VALUES('Bob', 14, 'School') WHERE NOT EXISTS (SELECT 1 FROM myTestTable WHERE name ='james' AND age =45 AND address ='school')")
c.execute("INSERT INTO myTestTable VALUES('Jack', 15, 'School') WHERE NOT EXISTS (SELECT 1 FROM myTestTable WHERE name ='james' AND age =45 AND address ='school')")
conn.commit()
def query1():
c.execute("SELECT * FROM myTestTable WHERE address = ?",(param,))
while True:
row=c.fetchone()
if row == None:
break
print(row)
c.close()
conn.close()
create_table()
data_entry()
query1()
【问题讨论】:
-
顺便说一句,我认为您之前的问题(及其答案)在这里让您走错了路。您仅对
james条目进行了硬编码,因此如果您的语法正常工作,它不会阻止您复制其他条目。超出您的 3 个测试条目,这种方法将变得站不住脚。
标签: python sql python-3.x sqlite