【问题标题】:Flask-SQLAlchemy invalid identifier on ID columnID 列上的 Flask-SQLAlchemy 无效标识符
【发布时间】:2018-10-09 13:45:17
【问题描述】:

我正在尝试使用 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 编译错误: 位置 7 的错误行 1 无效标识符 'ID_SEQ.NEXTVAL' [SQL: 'INSERT INTO user (id, username, email, password) VALUES (%(id)s, %(username)s, %(email)s, %(password_hash)s)' ] [参数:[{'email': 'jtest@test.net', 'username': 'Jordan', 'password': None}]] (此错误的背景:http://sqlalche.me/e/f405

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

【问题讨论】:

    标签: python-3.x flask-sqlalchemy snowflake-cloud-data-platform


    【解决方案1】:

    找到了解决方案,因为我使用的是烧瓶迁移包,所以我进入了版本文件夹并在我的用户表的迁移脚本中观察到我的“序列”功能没有被包括在内。这导致我的 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')
    )
    

    【讨论】:

    • 您能告诉我们您是如何解决这个问题的吗?您是否将序列对象手动添加到迁移中?
    • 将其添加到模型脚本中并进行了升级
    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多