【问题标题】:I couldn't create tables with SQLAlchemy on Flask我无法在 Flask 上使用 SQLAlchemy 创建表
【发布时间】:2020-11-12 14:07:22
【问题描述】:

您好,我正在尝试使用 SQLAlchemy 创建数据库及其表,为此我有以下代码和结构:

.
├── api
│   ├── api.py
│   ├── config.py
│   ├── connector.py
│   ├── detector
│   │   ├── __init__.py
│   │   └── route.py
│   └── user
│       ├── __init__.py
│       └── model.py
├── database.db
├── manager.py
├── queue
│   ├── __init__.py
│   └── queue.py
└── requirements.txt

要求:

dictalchemy~=0.1.2.7
Flask-RESTful
redis
Flask-SQLAlchemy
Flask-Script
Flask-Migrate
python-dotenv
SQLAlchemy~=1.3.18
Flask~=1.1.2
flask-cors

user.model

from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import Text
from api.connector import BaseModel, engine


class User(BaseModel):
    __tablename__ = 'users'

    id = Column(
        Integer,
        name='id',
        nullable=False,
        primary_key=True,
        autoincrement=True,
    )

    email = Column(
        Text,
        name='email',
    )

Base.metadata.create_all(engine)

连接器

from contextlib import contextmanager
import functools

from dictalchemy import DictableModel
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///database.db", echo=True)
_db_session = sessionmaker(bind=engine)

BaseModel = declarative_base(cls=DictableModel)

API

from flask import Flask
from flask_restful import Api
from api.detector.route import Detector
from flask_cors import CORS

app = Flask(__name__)
api = Api(app)

cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

api.add_resource(Detector, '/api/v1.0/det')

经理

from api.api import app
from flask_script import Manager
from api.connector import engine, BaseModel

from api.detector.route import Detector

manager = Manager(app)
app.config['DEBUG'] = True


@manager.command
def create_tables():
    "Create relational database tables."
    BaseModel.metadata.create_all(engine)

if __name__ == '__main__':
    manager.run()

为了创建表,我使用这个 python manager.py create_tables,返回:

2020-07-23 00:45:15,815 信息 sqlalchemy.engine.base.Engine SELECT CAST('test plain 返回' AS VARCHAR(60)) AS anon_1 2020-07-23 00:45:15,815 信息 sqlalchemy.engine.base.Engine () 2020-07-23 00:45:15,816 信息 sqlalchemy.engine.base.Engine SELECT CAST('test unicode 返回'AS VARCHAR(60)) AS anon_1 2020-07-23 00:45:15,816 INFO sqlalchemy.engine.base.Engine()

数据库文件已创建,但为空。

为什么模型没有加载到数据库中?

谢谢。

【问题讨论】:

    标签: python flask sqlalchemy flask-restful flask-script


    【解决方案1】:

    create_all() 为它知道的模型创建表。如果它不知道任何信息,那么它非常乐意使用空模式创建数据库。

    似乎create_all() 在导入user.model 之前运行。解决这个问题,你应该会得到表格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2016-03-18
      相关资源
      最近更新 更多