Flask Postgresql 数组不会永久更新

2023-11-29

我正在开发一个使用 Flask 和 PostgreSQL 数据库以及 SQLAlchemy 的项目。

I have Group具有以下列表的对象User属于该组成员的 ID。由于某种原因,当我尝试将 ID 添加到组时,它无法正确保存。

如果我尝试members.append(user_id),它似乎根本不起作用。但是,如果我尝试members += [user_id],id 将显示在列出所有组的视图中,但如果我重新启动服务器,则添加的值将不存在。然而,初始值是。

相关代码:

最初将组添加到数据库:

db = SQLAlchemy(app)
# ...
g = Group(request.form['name'], user_id)
db.session.add(g)
db.session.commit()

团体班:

from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import ARRAY

class Group(db.Model):
    __tablename__ = "groups"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    leader = db.Column(db.Integer)

    # list of the members in the group based on user id
    members = db.Column(ARRAY(db.Integer))

    def __init__(self, name, leader):
        self.name = name
        self.leader = leader
        self.members = [leader]

    def __repr__(self):
        return "Name: {}, Leader: {}, Members: {}".format(self.name, self.leader, self.members)

    def add_user(self, user_id):
        self.members += [user_id]

我用于更新组的测试功能:

def add_2_to_group():
    g = Group.query.all()[0]
    g.add_user(2)
    db.session.commit()
    return redirect(url_for('show_groups'))

谢谢你的帮助!


As 你提到过, the ARRAYsqlalchemy 中的数据类型是不可变的。这意味着一旦初始化就无法将新数据添加到数组中。

为了解决这个问题,创建一个类MutableList.

from sqlalchemy.ext.mutable import Mutable

class MutableList(Mutable, list):
    def append(self, value):
        list.append(self, value)
        self.changed()

    @classmethod
    def coerce(cls, key, value):
        if not isinstance(value, MutableList):
            if isinstance(value, list):
                return MutableList(value)
            return Mutable.coerce(key, value)
        else:
            return value

此代码片段允许您扩展列表以添加可变性。因此,现在您可以使用上面的类来创建可变数组类型,例如:

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

Flask Postgresql 数组不会永久更新 的相关文章

随机推荐

  • 在 R 中,如何将具有单个逗号分隔字段的一条记录转换为多条记录?

    我在R工作 我有一个数据集 其中一些记录包含城市和县的列表 而不仅仅是一个城市或县 我正在寻找一种方法将该数据转换为 长 格式 其中会有多个记录 每个记录都有一个城市 县 reshape 假定多列 而不是一列中的逗号分隔列表 strspli
  • Winforms:平滑面板的圆角边缘

    我已关注本教程以创建圆形面板 本教程中的代码是用 vb 编写的 但我能够将其转换为 C 所以这是我的代码 public class SPanel Panel Pen pen float penWidth 2 0f int edge 20 C
  • Cordova / Phonegap 获取设备的电话号码(Android 和 iOS)

    是否可以使用 Phonegap Cordova 开发混合移动应用程序并访问 Android 和 iOS 设备的电话号码 iOS 您可以使用 CoreTelephony 框架检索电话号码 您需要添加以下权利 com apple coretel
  • 转置查询输出

    我有一个正常的选择查询 其结果如下输出 select cid x1 x2 x3 x4 fy from temp table cid x1 x2 x3 x4 fy 6657 100 0 0 200 2014 6658 300 0 0 400
  • 如何将十六进制字符串转换为十进制

    当我尝试这个时 Decimal m Decimal Parse columns 1 System Globalization NumberStyles AllowHexSpecifier 我收到一个 ArgumentException 这么
  • 无法通过terraform中的ARM模板将API连接到逻辑应用程序

    在我的 terraform 中 我在 ARM 模板的帮助下创建了一个逻辑应用程序及其工作流程 逻辑应用中使用的 2 个连接也是通过 ARM 模板创建的 但不知何故 即使资源是在 Azure 中创建的 但是当我到达逻辑应用程序时 我总是必须手
  • 是否可以使用 FileSystemWatcher 识别哪个进程正在更改文件?

    是否可以使用 FileSystemWatcher 查找正在更改文件的 PID 或进程名称 不 您需要一个文件系统过滤器驱动程序来跟踪此类详细信息的更改
  • Winforms:有没有办法在我的应用程序中打开表单时收到通知?

    我的主窗体上有一个 切换到窗口 按钮 我希望仅当其他窗口 在我的应用程序中 打开时才启用该按钮 每当打开或关闭表单时 是否会引发某种我的主表单可以挂钩的事件 例如 也许某种方式可以跟踪 Application OpenForms 何时发生更
  • Linux - 将命令的 STDOUT 发送到 RSS Feed

    我希望使用个人 RSS 源进行系统报告 所以我想知道是否可以创建一个脚本将其 1 发送到 RSS 源 alaself test command gt rss report sh 我目前也没有设置 RSS 提要 那么设置从 Linux 机器运
  • PermGen 实际上代表什么?

    我知道 PermGen 是什么 它的用途是什么 为什么会失败 如何增加它等等 我不知道 PermGen 到底代表什么 永久 Gen 什么东西 有谁知道 PermGen 到底代表什么 永久一代 细节当然是特定于实现的 简而言之 它包含与类和内
  • 为什么我的 Python 代码会出现“未定义”错误?

    如果变量 key 返回到解密函数中 为什么它无法被识别 错误显示 NameError 全局名称 key 未定义 以下是代码 alphabet abcdefghijklmnopqrstuvwxyz alphaList list alphabe
  • 使用规则插入辅助表自动增量序列

    要自动在第二个表中添加列以通过唯一索引将其绑定到第一个表 我有如下规则 CREATE OR REPLACE RULE auto insert AS ON INSERT TO user DO ALSO INSERT INTO lastlogi
  • 如何在 R Shiny 中实现清理例程?

    例如 我的闪亮应用程序可能会打开数据库连接 server R db lt dbConnect SQLite DB PATH shinyServer things involving db 现在 如何确保连接db已正确关闭 通过dbDisco
  • 使用 python 渲染 Latex 文本

    我正在尝试用 python 渲染 Latex 文本 这就是我试图做的 import matplotlib pyplot as plt txte r The emph characteristic polynomial chi lambda
  • 使用 Android Q 拒绝 AndroidAudioConverter 权限

    Android Q 引入了一些有关文件夹 文件权限的重大更改 在 Android 上使用转换器时出现以下错误 java io IOException 无法运行程序 data user 0 com ltcfastpay timecard de
  • 使用请求的响应时间极长

    描述 我有一个运行 Python 应用程序的 AWS ec2 实例 ubuntu 16 其中我调用了一些 Facebook Account Kit API 和 Google Play Store API 它们都工作得很好 直到我两周前重新启
  • 如何从表格单元格(td)中获取相应的表格标题(th)?

    给定下表 我如何获取每个 td 元素对应的表头 table thead tr th Name th th Address th tr thead tbody tr td Bob td td 1 High Street td tr tbody
  • Golang 中的类型转换

    我正在阅读以下文章 https www ribice ba golang enums 代码示例之一中定义了一个函数 func lt LeaveType UnmarshalJSON b byte error Define a secondar
  • 用于文本选择控件的自定义浮动工具栏

    我想自定义选择文本时出现的浮动工具栏 这是标准浮动工具栏的示例 你知道我如何定制它 比如添加粗体 斜体 吗 有外部图书馆吗 Monospace 应用程序正是我想要的 您将向清单中的活动添加一个意图过滤器
  • Flask Postgresql 数组不会永久更新

    我正在开发一个使用 Flask 和 PostgreSQL 数据库以及 SQLAlchemy 的项目 I have Group具有以下列表的对象User属于该组成员的 ID 由于某种原因 当我尝试将 ID 添加到组时 它无法正确保存 如果我尝