Flask 中的一对一关系

2023-12-03

我正在尝试使用 SqlAlchemy 在 Flask 中创建一对一关系。我按照之前的post我创建了如下类:

class Image(db.Model):
    __tablename__ = 'image'
    image_id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(8))

class Blindmap(db.Model):
    __tablename__ = 'blindmap'
    module_id = db.Column(db.Integer, primary_key = True)
    image_id = db.Column(db.Integer, ForeignKey('image.image_id'))

虽然它可以将模型迁移到 sqlite3 数据库,但当我尝试创建单个对象以通知另一个类的值作为 image_id 时,出现错误。例如:

image1 = Image(image_id=1, name='image1.png')
blindmap1 = Blindmap(module_id=1, image_id=1)

我遇到的错误如下。我不太明白这个完整性错误是什么。我还尝试在创建blindmap1 时插入对象本身,但没有成功。

======================================================================
ERROR: test_commit_blindmap (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 183, in test_commit_blindmap
  blindmap1.add_label(label1)
File "/home/thiago/Documents/ANU/MEDGg1/MEDG/LAWA/2014/trunk/app/models.py", line 325,   in add_label
db.session.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", line 150, in do
  return getattr(self.registry(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 776, in  commit
  self.transaction.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 377, in commit
  self._prepare_impl()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 357, in _prepare_impl
  self.session.flush()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1919, in flush
  self._flush(objects)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2037, in _flush
  transaction.rollback(_capture_exception=True)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
  compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2001, in _flush
  flush_context.execute()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
  rec.execute(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 526, in execute
  uow
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 65, in save_obj
  mapper, table, insert)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 570, in _emit_insert_statements
  execute(statement, multiparams)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 729, in execute
  return meth(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 321, in _execute_on_connection
  return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement
  compiled_sql, distilled_params
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 958, in _execute_context
context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1160, in _handle_dbapi_exception
  exc_info
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
  reraise(type(exception), exception, tb=exc_tb)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 951, in _execute_context
context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 436, in do_execute
  cursor.execute(statement, parameters)
IntegrityError: (IntegrityError) UNIQUE constraint failed: blindmap.module_id u'INSERT INTO blindmap (module_id, image_id) VALUES (?, ?)' (1, 1)

更清楚:问题与关系图像和盲图有关。我的一对一关系不正确,导致我犯了这个错误。我想知道问题是什么或建立一对一关系的正确方法。


你们的关系很好。 您的问题是,您自己设置主键(特别是示例中的 module_id )。

错误消息清楚地告诉您出了什么问题: 已经有一个Blindmap with module_id = 1在你的数据库中。 自从module_id是您的主键,您无法插入第二个。

您不必尝试自己设置主键和外键,而是让 SQLAlchemy 通过定义适当的关系来为您完成此操作。

例如。如:http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#one-to-one :

class Image(db.Model):
    __tablename__ = 'image'
    image_id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(8))
    # the one-to-one relation
    blindmap = relationship("Blindmap", uselist=False, backref="image")

class Blindmap(db.Model):
    __tablename__ = 'blindmap'
    module_id = db.Column(db.Integer, primary_key = True)
    image_id = db.Column(db.Integer, ForeignKey('image.image_id'))


image1 = Image(name='image1.png')
blindmap1 = Blindmap()
blindmap1.image = image1 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask 中的一对一关系 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • SQLAlchemy 与 celery 的会话问题

    我已经为我们的网络应用程序安排了一些使用 celerybeat 重复执行的任务 该应用程序本身是使用金字塔网络框架构建的 使用 zopetransaction 扩展来管理会话 在 celery 中 我将该应用程序用作库 我正在使用函数重新定
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 坚持使用 JPA 会使嵌套对象的数据库外键字段为空

    我有结构表 orders id bigint 20 amount bigint 20 order details id bigint 20 payment type varchar 255 order fk bigint 20 实体 MyO
  • 如何解决 Eclipse 中的 multidex 错误

    我正在开发一个应用程序 在该应用程序中我使用了太多的库 最近我将 mixpanel lib 添加到我的项目中 之后就构建成功了 但是当我尝试运行该应用程序时 出现错误 2015 11 06 15 04 54 Dex Loader 无法执行
  • 弱小的自己去哪儿了?

    我经常这样做 let when DispatchTime now 2 0 DispatchQueue main asyncAfter deadline when beep 在一个应用程序中我们经常这样做 tickle fresh msg i
  • 在父方法中访问子方法的静态属性

    假设我有以下代码 class Parent static string MyField ParentField public virtual string DoSomething return MyField class Child Par
  • 如何从csv文件中读取自定义格式的日期?

    我正在解析一个 csv 文件 其数据为 03 10 2016 18 00 00 2 6 当我阅读文件创建架构时 如下所示 StructType schema DataTypes createStructType Arrays asList
  • 如何在 rglplot3d 中绘制曲面

    所以我有这段代码可以产生精确的表面 f function x y z x 2 3 y 2 exp x 2 y 2 plot3d f col colorRampPalette c blue white xlab X ylab Y zlab Z
  • C# 将日期时间转换为特定格式

    我想将日期时间转换为指定格式 Wed Aug 01 2012 14 37 50 GMT 0530 India Standard Time 实际上我想在网页上使用 Jquery 显示计时器 所以我尝试了一些我知道的格式 并找到了一些来自htt
  • 稀疏向量之和:缺陷还是特征?

    我最近在 MATLAB R2022a 中偶然发现了以下行为 gt gt a sparse 1 2 1 a 1 2 1 gt gt b sparse 2 1 18 b 2 1 18 gt gt a b ans 2 1 18 1 2 1 2 2
  • 如何将额外意图传递给两项活动

    我有一个应用程序 在第一个活动中询问第二页上的人名 它在句子中显示该名称我想在第三个第四或第九个活动中使用该名称我如何正确声明它 公开 并调用它我何时何地需要它 这是我发送的代码 Main public class MainActivity
  • Android 中的线程处理长时间运行的进程

    好吧 这是我的问题 我想学习 AsyncTask Threading 和 Handler 来处理长时间运行的任务 我使用了 Android Cook Book 和 New Boston Android 教程 但我无法使其工作 我需要更改进度
  • 使用动态 ID 选择 Multiple SelectManyCheckBox 中的所有项目

    我想使用 JSF 顶部的 PrimeFaces 组件来选择某些复选框组中的所有复选框 我的代码是这样的
  • 获取 RecyclerView 中的可见项

    我需要知道哪些元素当前显示在我的 RecyclerView 中 没有相当于OnScrollListener onScroll ListView 上的方法 我尝试与View getGlobalVisibleRect 但是这个 hack 太丑陋
  • 以编程方式登录站点

    这可能听起来很愚蠢 但是我们可以通过传递用户凭据 用户 ID 和密码 以编程方式登录 Linkedin 等网站吗 我不是在谈论使用 OAuth 或其他机制 Edit 您可以使用脚本以这种方式登录许多站点 我通常更喜欢使用 Beautiful
  • UITextView - 设置字体不适用于 XCode 5 上的 iOS 6

    我正在为我的用户界面使用故事板 我之前使用的是 XCode 4 6 并在 iOS 6 上发布 此后我使用 XCode 5 更新到 iOS 7 并更新了 Storyboard 以与 XCode 5 很好地配合 但我有一个问题 UITextVi
  • 在 React 的 useEffect() 中获取数据返回“未定义”

    我正在尝试从数据库中获取数据 这是一个获取请求 只要我在异步函数中使用获取的数据 一切都可以正常工作 但除此之外 它只是返回 未定义 我究竟做错了什么 感谢您的帮助 const accountInfos setAccountInfos us
  • 创建一个新文件,文件名包含循环变量,python [重复]

    这个问题在这里已经有答案了 我想在循环上运行一个函数 并且想将输出存储在不同的文件中 以便文件名包含循环变量 这是一个例子 for i in xrange 10 f open file i dat w f write str func i
  • Chrome 和 CSS 属性选择器

    我有以下 HTML 代码 我想用 css 格式化无法更改的数据格式 来自 xml 我必须为具有不同属性值的元素赋予不同的样式 我想使用 CSS 属性选择器 body background color black s text decorat
  • 如何在 Grails 脚本中访问服务?

    关于 create script run script 的文档很少 所以我想知道是否可以在 grails 脚本中注入 使用域类 在普通的 Grails 类中 我可以注入如下服务 定义我的服务 但我不确定 grails 脚本中的位置 要在脚本
  • jQuery,如何在 .load() 之后重新绑定 html 元素

    我有一个 html 组件 单击按钮后将重新加载该组件 组件的某些元素绑定到单击和悬停处理程序 一切工作正常 直到 load 调用函数来重新加载组件 加载组件的元素未绑定到相应的处理程序 此时 我将 js 脚本放在组件的末尾 以便它绑定元素
  • Flask 中的一对一关系

    我正在尝试使用 SqlAlchemy 在 Flask 中创建一对一关系 我按照之前的post我创建了如下类 class Image db Model tablename image image id db Column db Integer