postgres/sqlalchemy - 如何向表的现有列添加唯一约束

问题描述

我已经查看了其他几个答案,但还没有找到一个同时显示 create 语句和模型类的答案,大多数只是展示了如何在创建表时将列定义为唯一的。

我有一行代码可以将行写入 postgres 和下面的关联模型类

self.cur.execute("INSERT INTO autos(make,year,model,license) VALUES (%s,%s,%s)",(item['make'],item['year'],item['model'],item['license']))

class AutoItem(db.Model):
    __tablename__ = 'autos'
    id = db.Column(db.Integer,primary_key=True)
    make = db.Column(db.String(255))
    year = db.Column(db.String(255))
    model = db.Column(db.String(255))
    license = db.Column(db.String(255))

为了防止重复行,我在代码行中添加一个 ON CONSTRAINT 语句

self.cur.execute("INSERT INTO autos(make,%s) ON CONFLICT (license) DO nothing;",item['license']))

添加 ON CONSTRAINT 语句会产生以下错误

psycopg2.errors.InvalidColumnReference: there is no unique or exclusion constraint matching the ON CONFLICT specification

所以要更新模型类,使许可证列是唯一的,我现在拥有的是

class AutoItem(db.Model):
    __tablename__ = 'autos'
    id = db.Column(db.Integer,primary_key=True)
    make = db.Column(db.String(255))
    year = db.Column(db.String(255))
    model = db.Column(db.String(255))
    license = db.Column(db.String(255),unique=True) #THIS WORKS

并且我在模型类的顶部添加一个导入(文件名为models.py)

from sqlalchemy import UniqueConstraint #THIS WORKS

错误 psycopg2.errors.InvalidColumnReference: there is no unique or exclusion constraint matching the ON CONFLICT specification 仍然存在?以前我删除了表格并创建了一个新表格,但也会产生相同的错误。我不知道它的 psycopg2、我的模型类和/或 ON CONSTRAINT 语句是否有问题?

编辑在下面添加屏幕截图

enter image description here

编辑 2 - 问题已解决

代码和模型类的工作解决方案行在上面,请参阅模型类的更新以及顶部的导入。我想我在创建表格时犯了一些错误。对我有用的是完全删除 autos 表并重新创建它...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)