python - Sql-alchemy 完整性错误

标签 python sqlalchemy

我有用户模型,描述如下:-

class User(db.Model, object):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(15), unique=True)
    email = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(80))

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def get_id(self):
        return unicode(self.id)

现在我有一个注册表,其描述如下:-

class RegisterForm(Form):
    email = StringField('email', validators=[InputRequired(), Email(message='Invalid email'), Length(max=50)])
    username = StringField('username', validators=[InputRequired(), Length(min=4, max=15)])
    password = PasswordField('password', validators=[InputRequired(), Length(min=8, max=80)])

现在问题来了,

当我通过网络应用程序注册/注册时,id 会自动递增并创建一个新用户。因此,我创建了 user1,id1 由 sql-alchemy 通过注册表自动分配。

现在我在数据库中使用插入语句来插入具有有效 ID 的新用户。所以我通过数据库中的插入语句创建了带有id2的user2。

如果我尝试通过网络应用程序创建 user3,它会显示sqlalchemy.exc.IntegrityError IntegrityError:(psycopg2.IntegrityError)重复键值违反唯一约束“users_pkey” 详细信息: key (id)=(2) 已存在。

现在,如果我再次尝试使用 user3 注册,它会创建一个新用户。

我尝试使用自动加载让flask知道最近的id,但它不起作用。

最佳答案

黑客可以从 id 列中查询最大 id 并将其加 1 并将其分配给新用户以防止主键冲突。

max_id = session.query(User).order_by(User.id.desc()).first()
new_user = User(id=max_id+1, email=form.email.data, username=form.username.data, password=hashed_password)
db.session.add(new_user)
db.session.commit()

关于python - Sql-alchemy 完整性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43758508/

相关文章:

python - 如何在 Sphinx 的 Python 文档字符串中指定变量类型?

python - 尝试在 Azure 中使用 matplotlib 时出现 "ModuleNotFoundError: No module named ' tkinter '"

python selenium firefox - add_extension 不起作用

sqlalchemy - Airflow + sqlalchemy 与元数据数据库的短暂连接

python - NoForeignKeysError : Could not determine join condition . ..没有链接这些表的外键

python - 不知道如何删除sqlalchemy 1.4关于cache_ok的警告

python - Tee 没有写入 Netcat 的输出

Python从HDFS读取文件作为流

python - 多语句事务中不允许sqlalchemy MSSQL创建数据库语句

python - Oracle 表未拥有的 SqlAlchemy 反射