一尘不染

如何使用原始SQL插入ForeignKey字段?

sql

我有类似以下的表格(Django模型定义,并带有一个postgres数据库):

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=300)     
class Owner(models.Model):
    id = models.IntegerField()
    person = models.ForeignKey(Person)

我使用Python脚本从CSV文件设置数据库。原始文件列出了具有整数id和整数“ person”字段的“所有者”,该字段映射到Person.id中的整数。

但是,鉴于Owner中的“ person”列希望使用Person对象,我该如何编写原始SQL字符串以将值插入Owner?

owner_id = 665
person_id = 330
sql_string = 'INSERT INTO owner (id, person) VALUES (' +
sql_string += owner_id + ', ' + ???? + ');'

阅读 171

收藏
2021-03-08

共1个答案

一尘不染

您没有说为什么需要在原始SQL中执行此操作。而且我也想不明白,为什么你正在使用structidx,并person在SQL当你的PK场被称为id-以及相关的列名personperson_id。因此,您的代码应为:

sql_string = "INSERT INTO owner (`id`, `person_id`) VALUES (%s, %s)"
cursor = connection.cursor()
cursor.execute(sql_string, (665, 330))

请注意,像我在此处使用Python db-api的引号功能始终是避免SQL注入攻击的好习惯。

2021-03-08