首页 > 解决方案 > 我在哪里可以找到利用 SQLite 创建列的 Python 代码片段?

问题描述

我正在开发一个使用常见烧瓶实践的小型个人项目,例如用户管理和内容限制,我想创建一个新列,在我的 SQLite 数据库中提供用户角色,该数据库由 python 脚本生成。具体来说,我想将这个角色user赋予每个新的注册表。我在哪里可以找到这样的例子或解决方案?

我尝试过使用类的解决方案,但我认为我弄错了,或者我没有完全掌握它。

更具体地说,我尝试了它,但出现以下错误

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: user.role
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.password AS user_password, user.email AS user_email, user.role AS user_role
FROM user
WHERE user.username IN (?)
 LIMIT ? OFFSET ?]
[parameters: ('a', 1, 0)]
class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True)
    username = Column(String(30), unique=True)
    password = Column(String(30))
    email = Column(String(50))
    role = Column(String(50))

    def __repr__(self):
        return '<User %r>' % self.username

标签: pythonsqliteflask-sqlalchemy

解决方案


在您的 init.py 文件中,您应该这样做:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
   app = Flask(__name__)
   db.init_app(app)
   db.app = app

   from .models import User
   db.create_all()

.models是您的模型所在的 .py 文件,请User记住调用

from .models import User
db.create_all()

在您已经创建应用程序并设置数据库之后:

app = Flask(__name__)
db.init_app(app)
db.app = app

否则你会得到一个异常,这是可以理解的,在你创建应用程序和数据库本身之前你不能在数据库上工作。

上面的解决方案是如果您从头开始创建项目,如果您有正在进行的项目并且您只需要添加一个表或更新现有的,解决方案是:https ://flask-migrate.readthedocs.io/ zh/最新/


推荐阅读