【问题标题】:How to access primary_key in flask-sqlalchemy?如何访问flask-sqlalchemy中的primary_key?
【发布时间】:2020-06-30 10:51:00
【问题描述】:

我想访问主键,以便管理员可以将主键更改为他们想要的任何内容。

class TheDataBase(database.Model):
    id = database.Column(database.Integer, primary_key=True, autoincrement=True)
    name = database.Column(database.String(20), nullable=False)
    descrip = database.Column(database.Text, default="N/A")

我尝试添加这样的列,但这会出错

name_id = database.Column(database.Integer, default=id)

无论如何要做类似的事情吗?如果可能的话,我不想定义另一个数据库。 我希望我把我的问题说清楚了

【问题讨论】:

  • 允许人们更改主键可能会导致问题,例如,如果键用于定义与其他表的外键关系。为什么管理员需要更改主键?
  • 查看this answer 了解为什么 postgresql 不重用已删除的 id。您的特定数据库可能会也可能不会受到类似限制。
  • 非常感谢好友的帮助,好的,那么无论如何我可以将数据库中的第三个对象放到另一个数据库中,或者说一些具有特定名称的对象我想将它们放在另一个数据库中数据库

标签: python database flask sqlalchemy flask-sqlalchemy


【解决方案1】:

通常更改表的主键真的很糟糕。如果表格设计错误,就应该这样做。我可以建议您使用几种替代方法。例如,您可以定义用户能够更改的唯一约束。 Onestly我也不喜欢这个解决方案。您可以考虑的另一件事是设计一种带有您需要的约束的帮助表,然后将外键与主表一起应用。

顺便说一句。剧本的目的是什么?如果你能给我们一个用例,也许我们可以找到更好的解决方案。

【讨论】:

  • 它是一个电影数据库,我想要每部电影的 ID,如果管理员愿意,应该更改 ID,这样如果他在 4 和 6 之间删除 5,那么他可以添加另一部电影5 的 id 普通 id(主键)不允许这样做
  • 我说,你要改的不是主键,而是业务键。主键对用户没有用。正如我之前告诉你的,你可以简单地创建一个带有 UQ 约束的业务密钥,让用户更改它并让系统使用它喜欢的任何 id。您可以创建一个自定义函数并用缺失值填充该字段,以便它可以递增。请参考docs.sqlalchemy.org/en/13/core/…docs.sqlalchemy.org/en/13/core/…
猜你喜欢
  • 2012-10-22
  • 2013-08-31
  • 2020-02-15
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2018-08-30
相关资源
最近更新 更多