【问题标题】:Flask-SQLAlchemy not creating my tablesFlask-SQLAlchemy 没有创建我的表
【发布时间】:2015-01-03 10:10:54
【问题描述】:

SQLAlchemy,由于某种原因,当我运行我的 create_db.py 时,只创建了迁移表。 我用from modules import db,models从python终端尝试了它,然后运行db.create_all(),但它仍然给出相同的结果。

这是我的models.py

from __init__ import db
from datetime import datetime

class Batch(db.Model):
    __tablename__='batch'
    batch_id = db.Column(db.String, primary_key=True)
    #total = db.Column(db.Integer)
    success = db.Column(db.Integer)
    failure = db.Column(db.Integer)
    folder = db.Column(db.String(15))
    email = db.Column(db.String(20))
    detail = db.relationship('Conversion', backref='details',lazy='dynamic')
    platform = db.relationship('Platform', backref='pub_data', lazy = 'dynamic')

    def __init__(self,batch_id,success,failure,folder,email):
        self.batch_id = batch_id
        self.success = success
        self.failure = failure
        self.folder = folder
        self.email = email

class Conversion(db.Model):
    __tablename__ = 'conversion'
    id = db.Column(db.Integer, primary_key=True)
    batch_id = db.Column(db.String,db.ForeignKey('batch.batch_id'))
    file_names = db.Column(db.String)
    status = db.Column(db.String(6))
    error = db.Column(db.Text)
    res_prop = db.Column(db.Integer)        

    def __init__(self,batch_id,file_names,status,res_prop,error=None):
        self.batch_id = batch_id
        self.file_names = file_names
        self.status = status
        self.error = error
        self.res_prop = res_prop

class Platform(db.Model):
    __tablename__ = 'platform'
    id= db.Column(db.Integer,primary_key=True)
    batch_id = db.Column(db.String, db.ForeignKey('batch.batch_id'))
    title = db.Column(db.String)
    pub_date = db.Column(db.DateTime)

    def __init__(self,batch_id,title):
        self.batch_id = batch_id
        self.title = title
        self.pub_date = datetime()

这是我的create_db.py

from modules import models
from modules import db
from migrate.versioning import api
from modules.default_config import SQLALCHEMY_DATABASE_URI , SQLALCHEMY_MIGRATE_REPO
import os.path

db.create_all()
db.session.commit()
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
    api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))

【问题讨论】:

  • versions目录下没有文件?你有什么错误吗?
  • @OrDuan 没有错误。版本目录仅包含 init.py 没有其他文件。虽然在我运行 migrate.py 时会创建其他迁移文件
  • 尝试单独导入模型(从模块导入 models.Batch - 或类似的东西)
  • 我也试过了,但没用。现在问题已解决,我必须从模块导入应用程序,而不是 models.py 中的 __init__

标签: python flask flask-sqlalchemy


【解决方案1】:

改变

from __init__ import db

from modules import db

在 models.py 中它起作用了。 从外部包运行烧瓶应用程序时,需要从包本身而不是单个模块导入所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2020-11-12
    • 2021-12-31
    • 2014-10-15
    • 2018-06-15
    • 2021-03-29
    相关资源
    最近更新 更多