在mysql表中插入数据的查询包含外键
Posted
技术标签:
【中文标题】在mysql表中插入数据的查询包含外键【英文标题】:Query to insert data in mysql table contains foreign key 【发布时间】:2017-12-07 13:57:30 【问题描述】:我对 mysql 非常陌生,并且使用 python 将文件转储到 db 中。我有 2 张桌子 文件格式为:
id name sports
1 john baseball
2 mary Football
喜欢学生和运动 学生桌
id name
1 John
2 Mary
这里 id 是主键
&在运动桌上
stu_id sports_title
1 Baseball
2 Football
这里的 stu_id 是学生表的外键引用
我的问题是
query="insert into sports (stu_id,name)VALUES (%d,%s)"
("select id from student where id=%d,%s")
#words[0]=1 ,words[2]=Baseball
args=(words[0],words[2])
cursor.execute(query,args)
在执行这段代码时,我正面临着
"Not all parameters were used in the SQL statement")
ProgrammingError: Not all parameters were used in the SQL statement
【问题讨论】:
请详细说明words
是什么。
... 以及 query
的情况。
@IljaEverilä 我猜words
是顶部显示的文件中的行的字段。
@Barmar 如果你不得不猜测,这个问题是不完整的。它也可以是行,但编辑清楚地表明它是一行。
至少使用 mysql.connector DB-API 驱动程序all placeholders should be either %s or %(name)s,这取决于您如何传递参数。数字、字符串等之间没有区别。另见:***.com/questions/5785154/…
【参考方案1】:
您不能同时使用VALUES
和SELECT
作为INSERT
中的数据源。如果数据是文字,则使用 VALUES
,如果从另一个表中获取,则使用 SELECT
。如果是两者的混合,则使用 SELECT
并将文字放入 SELECT
列表中。
query = """
INSERT INTO sports (stu_id, sports_title)
SELECT id, %s
FROM student
WHERE name = %s
"""
args = (words[2], words[1])
cursor.execute(args)
或者,由于该文件包含学生 ID,因此您根本不需要 SELECT
。
query = "INSERT INTO sports(stu_id, sports_title) VALUES (%d, %s)"
args = (words[0], words[1])
cursor.execute(args)
【讨论】:
以上是关于在mysql表中插入数据的查询包含外键的主要内容,如果未能解决你的问题,请参考以下文章
在数据库上插入实体+外键的正确方法(使用:Mysql,JPA)