Flask-sqlalchemy和oracle数据库id不自动递增

2024-03-24

我想使用 Python 和 Flask 框架以及 SQLAlchemy 模块在我的数据库(Oracle 11g,但 Ubuntu 16.04 的 Express 版本)中创建一个新表。表的第一个字段是 ID,是一个整数字段,我希望它自动增量,但 Oracle 数据库不支持自动增量。我有一个表单来添加新评论,但是当我尝试添加新记录时,它会报告错误:

sqlalchemy.exc.IntegrityError: (cx_Oracle.IntegrityError) ORA-01400: 无法将 NULL 插入 ("WIKTOR"."TBL_COMMENTARIOS"."ID") [SQL: 'INSERT INTO tbl_comentarios (usuario, comentario, fecha) VALUES (:usuario) , :comentario, :fecha) 返回 tbl_comentarios.id INTO :ret_0'] [参数: {'usuario': 'wiktor', 'comentario': 'hola', 'fecha': datetime.datetime(2017, 5, 24, 11, 23, 45, 39450), 'ret_0': }]

基本上它说ID不能为空,发生这种情况是因为表单中没有字段可以添加它,所以它发送空ID,然后数据库模型的自动增量不起作用。这是代码:

db = SQLAlchemy()

class Comentarios(db.Model):
    __tablename__ = 'tbl_comentarios'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    usuario = db.Column(db.String(50))
    comentario = db.Column(db.Text())
    fecha = db.Column(db.DateTime, default = datetime.datetime.now)

def __init__(self, usuario, comentario):
    self.usuario = usuario
    self.comentario = comentario

我也尝试过:

id = db.Column(db.Integer, primary_key=True)

该代码在 SQL 数据库中确实有效,但在 Oracle 数据库中均无效。

对不起我的英语,我希望有人能帮助我...... 谢谢!


你可以找到here http://docs.sqlalchemy.org/en/latest/dialects/oracle.htmlSQLAlchemy 文档对此进行了讨论。 Oracle 没有自动增量功能,而是依靠序列来模仿行为。

因此,您的 id 列应如下所示:

id_seq = Sequence('id_seq')
id = db.Column(db.Integer, id_seq,
        server_default=id_seq.next_value(), primary_key=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-sqlalchemy和oracle数据库id不自动递增 的相关文章

随机推荐

  • 特别分发:无法安装应用程序

    我正在开发一个ios应用程序 仅适用于iphone 并试图让其他人测试它 我通过临时分发在自己的设备上安装该应用程序没有问题 当我尝试在另一个人的设备上安装时 它总是失败 并显示消息 此时无法安装 xxxxx 我正在使用 xcode 5 以
  • Jython 不会将 PYTHONPATH 加载到 sys.path 中

    根据我读到的内容 sys path 应该由 PYTHONPATH 设置 在 Python 中 它是这样工作的 但在 Jython 中则不然 我可以绕过 Dpython path 但我想知道为什么 Jython 表现不佳 qa Scantro
  • 在 Visual Studio 2010 中使用正则表达式查找和替换来小写

    我正在使用 Visual Studio 2010 中的查找和替换功能来更改字段的编码样式 所有实例类似于 m MyField 应该 myField 但我只能设法得到 MyField using Find what m a zA Z Repl
  • 无法安装 sqlite3-ruby gem

    我已经安装了 xcode 3 0 我需要安装 sqlite3 ruby gem 用于 rhosync 当我跑步时 sudo gem install l sqlite3 ruby 我收到以下错误 Building native extensi
  • 重复的 typedef - 在 C 中无效但在 C++ 中有效?

    我想要一个标准参考 为什么以下代码会触发 C 中的合规性警告 使用gcc pedantic typedef 重新定义 但在 C 中没问题 g pedantic typedef struct Foo Foo typedef struct Fo
  • 如何判断文件是否为空?

    如何判断文件是否为空 该文件由运行在Windows平台上的C程序打开 我想以附加模式打开一个文件 如果为空 首先打印一个标题 Open CSV write header report csv fopen SNR csv a if repor
  • 在 Mac 上解压缩大型 ZIP 档案(例如最新的 Microsoft Edge VM)

    尝试在我的 Mac 上解压最新的 Microsoft Edge Vm zip 文件后 我最终得到一个 cpgz 文件 它应该为 virtualBox 生成一个 ova 文件 有人知道怎么修这个东西吗 http mattormeeple co
  • 何时使用 handler.post() 以及何时使用 new Thread()

    我想知道什么时候应该使用handler post runnable 我什么时候应该使用new Thread runnable start Handler 的开发人员文档中提到了这一点 导致 Runnable r 添加到消息队列中 可运行的
  • MS Word 在 python 中的读/写、Python-docx 问题和 win32com 参考?

    最近 我正在尝试使用不同的 API 进行 MS Word 文件管理 现在正在编写 此时我只需要一个简单的编写Python API 我尝试了 win32com 模块 事实证明该模块非常强大 但缺乏 python 在线示例 对 VB 和 C 的
  • nginx 位置正则表达式 - 字符类和匹配范围

    我正在尝试为路径设置正则表达式 s lt 4 6 character string here gt 我将 4 6 个字符串捕获为 1 我尝试使用以下两个条目 但都失败了 location s 0 9a zA Z 4 6 location s
  • 不同Y级别的UIButton无法在tvOS上聚焦

    我开始为 Apple TV 开发应用程序 但在按钮方面遇到了这个问题 我有一个屏幕 屏幕底部有几个按钮 中间有一个按钮 请参阅屏幕截图以了解 问题是我无法集中中间按钮 焦点仅位于底部的三个按钮上 问题显然是由Y位置 当我移动屏幕底部的按钮时
  • 命令未存储在命令历史记录中

    背景 https stackoverflow com questions 76566358 这个答案 https stackoverflow com a 47595405 2153235依赖于 readline 模块并且write hist
  • 在 MVC razor 视图中的 foreach 循环中对单选按钮进行分组?

    我尝试通过在 html 帮助中提供额外的 html 属性来对循环内的一组单选按钮进行分组 如下所示 ol class Opt foreach var opt in quest Options li class Opt Html RadioB
  • 从 git 包中恢复所有引用

    如何从备份恢复所有远程分支 git bundle Backup git bundle create tmp dp all git bundle list heads tmp dp head n5 f37c9fc7f0ce121568f42f
  • 改进低效的 jQuery 选择器

    在 IntelliJ 中 如果我使用 jQuery 选择器 例如 roleField option each function impl omitted 选择器突出显示 并建议我应该 以 ID 选择器开头的拆分后代选择器 IntelliJ
  • 语音训练文件和注册表位置

    我有一个演讲项目 需要用代码完成声学训练 我能够使用 SAPI 在 Windows 7 下成功创建包含成绩单及其关联注册表项的培训文件 但是 我无法确定识别引擎是否成功使用这些文件并调整其模型 我的问题如下 通过控制面板训练 UI 执行训练
  • Cordova InAppBrowser 不会缩放加载的页面

    谁能帮我获取 Cordova InAppBrowser 在 Android 应用程序上加载的外部页面以适合手机屏幕尺寸 我使用以下代码从 Sencha Touch 应用程序调用 inappbrowser var opt location n
  • AngularJS 'scrollTop' 等效吗?

    我希望在 AngularJS 指令中实现类似的东西 https github com geniuscarrier scrollToTop blob master jquery scrollToTop js https github com
  • 不同 int 类型的运算

    我有一个使用多种不同 int 类型的程序 最常用的是uint64 t和标准int 但是我想知道我是否可以安全地进行它们之间的混合操作 例如我有一个uint64 t我想添加一个int并将该值存储为另一个值uint64 t 做这样的事情安全吗
  • Flask-sqlalchemy和oracle数据库id不自动递增

    我想使用 Python 和 Flask 框架以及 SQLAlchemy 模块在我的数据库 Oracle 11g 但 Ubuntu 16 04 的 Express 版本 中创建一个新表 表的第一个字段是 ID 是一个整数字段 我希望它自动增量