当前位置: 首页 > 面试题库 >

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

岳迪
2023-03-14
问题内容

我有类似以下的表格(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 + ', ' + ???? + ');'

问题答案:

您没有说为什么需要在原始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注入攻击的好习惯。



 类似资料:
  • 我使用Laravel创建一个简单的REST服务,将一个点几何图形和另外两个字符串值一起插入到PostgreSQL(用PostGIS扩展)表中。由于雄辩(据我所知)不支持PostGIS函数,我使用的是原始的SQL查询。 我的控制器如下所示: 通过请求发送的值是: 名称:Lidl 商店:便利 geom: {“type”:“Point”,“坐标”:[18.126712,42.643304],“crs”:

  • 问题内容: 我在控制器的函数中。 因此,从表单中,我得到了一个变量的值,说: 然后,我需要在WHERE语句中嵌入该变量(即它的值)。如果我对值进行硬编码,它将带来正确的结果,但是我已经尝试了各种方法来插入该变量而没有成功。好吧,假设我设法使用了该变量,那么我将不得不研究绑定以避免SQL注入,但是到目前为止,我要说的是,看看该变量是否可以在查询中使用。 我已经试过了,双引号,串联。$ vx。,花括号

  • 我有一个upsert需求,所以我需要调用postgres存储过程或使用公共表表达式。我还将pgcrypto扩展用于密码,并希望使用postgres函数(例如“crypt”来编码/解码密码)。 但是我找不到让ecto部分或全部使用原始sql的方法,是不是打算让ecto只支持长生不老的dsl,而不允许在dsl不够用的情况下使用原始sql? 我发现我可以通过适配器进行查询(Rocket是应用程序的名称)

  • 问题内容: 由于有几个版本,h2确实支持空间几何。 在Java中选择并插入几何图形不是问题。但是如何将它们插入纯sql中呢?文档显示它使用WKT。但是,当我尝试插入WKT时出现错误。 这是一个示例插入: 感谢您的提示! 问题答案: 据我所知,后缀不是WKT(知名文本),而是EWKT。 H2数据库当前不支持EWKT(扩展的知名文本)。您将不得不使用。一个完整的例子:

  • 问题内容: 我需要将大量数据上传到MySQL数据库。对于大多数模型,我使用django的ORM,但是我的一个模型将具有数十亿(!)个实例,并且我想优化其插入操作。 我似乎找不到找到使executemany()工作的方法,并且在进行谷歌搜索之后,似乎几乎没有示例了。 我正在寻找正确的sql语法+正确的命令语法+正确的值数据结构以支持以下sql语句的executemany命令: 是的,我明确指出了ID

  • 问题内容: 我正在根据CS50的网络系列创建一个应用程序,该程序要求我仅使用原始SQL查询而不是ORM。 我正在尝试提供一个搜索功能,用户可以在其中查找存储在数据库中的书籍列表。我想让他们查询名为“ books”的表格中的ISBN,标题,作者列 目前,它确实拍摄了“ GET”请求,没有问题,但是它没有返回任何数据,我认为问题出在我编写的SQL行中。 这是路线: 这是我的模板 任何人都可以发现问题吗