在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】:

您不能同时使用VALUESSELECT 作为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表中,表的外键关联自身主键,为啥插入不了数据?

如何在java jframe表中插入递增的主键和外键?

如何将数据插入到通过外键相关的两个表中?

在数据库上插入实体+外键的正确方法(使用:Mysql,JPA)

MySQL笔记--- 创建表;插入,修改,删除数据;主键,外键约束;事务;索引;视图;三范式;

mysql中添加外键问题,求高手