首页 > 解决方案 > ID 列上的 Flask-SQLAlchemy 无效标识符

问题描述

我正在尝试使用 Python 终端使用以下命令添加用户:

from app import db
from app.models import User, Post
u = User(username='Jordan',email='jtest@test.net')
db.session.add(u)
db.session.commit()

下面是我的模型:

class User(db.Model):
    id = db.Column(db.Integer, db.Sequence('id_seq'), primary_key=True)
    username = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(120), unique=True)
    password = db.Column(db.String(128))
    posts = db.relationship('Post', backref='author',lazy='dynamic')

    def __repr__(self):
        return 'User {}'.format(self.username)

初始化脚本:

from flask import Flask
from config import Config, SnowflakeImpl
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# Creates an instance of the flask application
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes, models

sqlalchemy.exc.StatementError: (sqlalchemy.exc.ProgrammingError) (snowflake.connector.errors.ProgrammingError) 000904 (42000): SQL 编译错误:错误行 1 在位置 7 无效标识符 'ID_SEQ.NEXTVAL' [SQL: 'INSERT INTO用户(id,用户名,电子邮件,密码)值(%(id)s,%(用户名)s,%(email)s,%(password_hash)s)'] [参数:[{'email':'jtest@ test.net', 'username': 'Jordan', 'password': None}]] (此错误的背景:http ://sqlalche.me/e/f405 )

这是我收到的错误,从我在网上阅读的内容来看,这应该可以工作,但它会反馈一个“无效标识符”错误。

标签: python-3.xflask-sqlalchemysnowflake-cloud-data-platform

解决方案


找到了解决方案,因为我使用的是烧瓶迁移包,所以我进入了版本文件夹并在我的用户表的迁移脚本中观察到我的“序列”功能没有被包括在内。它导致我的 ID 出现 Invalid Identifier 错误。

def upgrade():
    op.create_table('user',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('username', sa.String(length=64), nullable=True),
    sa.Column('email', sa.String(length=120), nullable=True),
    sa.Column('password_hash', sa.String(length=128), nullable=True),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('email'),
    sa.UniqueConstraint('username')
)

推荐阅读