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

时间:2010-10-16 18:04:24

标签: sql django postgresql

我有以下表格(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'字段的Owners,它映射到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 + ', ' + ???? + ');'

1 个答案:

答案 0 :(得分:1)

您没有说明为什么需要在原始SQL中执行此操作。我还不明白为什么在调用PK字段structidx时在SQL中使用personid - 并且person的基础列名是person_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注入攻击。