在 SQL 中使用"WHERE" "INSERT"命令将数据输入特定字段?(蟒蛇)



我目前正在为家长晚会系统编写一个程序。我有两张表,一张预订表和一张教师表,设置有以下列标题:教师主题|15:30|15:35|15:40等。当人们预订时,他们会从下拉菜单中选择一位教师和一个时间。因此,我需要将bookingID添加到预订表中,其中所选教师=添加到表中的同一教师,并且其中所选时间=数据库中的时间。

目前,我的代码只试图匹配老师,但这不起作用,因为我得到了以下错误:(第5行(TypeError:"str"对象不可调用

我是不是把整件事都做错了?我摆桌子的方式真的可能吗?

def insert(parent_name, parent_email, student_name,student_form,teacher,app_time,comments):
conn=sqlite3.connect("parentsevening.db")
cur=conn.cursor()
cur.execute("INSERT INTO bookings VALUES (NULL,?,?,?,?,?,?,?)",(parent_name,parent_email,student_name,student_form,teacher,app_time,comments))
cur.execute("INSERT INTO teachers VALUES (?) WHERE teachers = (?)" (id,teacherName,))
conn.commit()
conn.close()

此SQL查询无效。

INSERT INTO teachers VALUES (?) WHERE teachers = (?)

应该是

INSERT INTO teachers (id, name) VALUES(?, ?)

请注意,我猜测插入中的教师列(id,name(WHERE无效,因为它用于查找数据(SELECT,UPDATE,DELETE(

好的,让我们去掉注释并将其作为一个答案。

Python错误

我认为您的错误来自WHERE teachers = (?),您是否尝试了WHERE teachers = ?

但是。。。

sql语法错误

此外,从SQL语法的角度来看,这个命令作为一个整体没有多大意义——你似乎试图在不存在的老师的位置插入(如果你正在插入它们(,而插入的值与哪里和哪里需要from不符。也就是说,一旦你解决了python错误,sqlite也会适应。

另一个答案已经涵盖了这一点。

但是。。。

可能不是你应该做的

如果你有一位现有的老师,你只需要将他们的教师ID插入表bookings中。您不必这样做,而且事实上,您此时不能插入到表teachers中,您会得到重复的数据错误。

因此,与其修复第二个查询,不如完全去掉它。

如果您可以启动命令行或GUI SQL工具,请尝试在用Python编码之前手动硬编码来运行这些查询。sqlite命令应该能够为您做到这一点。

(建议(不要使用insert table values

尝试用insert into table (<column list>) values显式。。。。原因是,一旦表以某种方式更改,从而影响列顺序(可能是更改列(,值就不会与隐含的插入列表对齐。很难调试,很难知道在编写时的意图。去过那里,做了那件事。而且必须调试走这条捷径的buncha人的代码,这从来都不是的乐趣

最新更新