Flask-Migrate不创建表

我的档案中包含以下模型listpull/models.py:

from datetime import datetime

from listpull import db

class Job(db.Model):

id = db.Column(db.Integer, primary_key=True)

list_type_id = db.Column(db.Integer, db.ForeignKey('list_type.id'),

nullable=False)

list_type = db.relationship('ListType',

backref=db.backref('jobs', lazy='dynamic'))

record_count = db.Column(db.Integer, nullable=False)

status = db.Column(db.Integer, nullable=False)

sf_job_id = db.Column(db.Integer, nullable=False)

created_at = db.Column(db.DateTime, nullable=False)

compressed_csv = db.Column(db.LargeBinary)

def __init__(self, list_type, created_at=None):

self.list_type = list_type

if created_at is None:

created_at = datetime.utcnow()

self.created_at = created_at

def __repr__(self):

return '<Job {}>'.format(self.id)

class ListType(db.Model):

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(80), unique=True, nullable=False)

def __init__(self, name):

self.name = name

def __repr__(self):

return '<ListType {}>'.format(self.name)

我打电话./run.py init,然后./run.py migrate然后./run.py upgrade,我看到迁移文件生成,但其空:

"""empty message

Revision ID: 5048d48b21de

Revises: None

Create Date: 2013-10-11 13:25:43.131937

"""

# revision identifiers, used by Alembic.

revision = '5048d48b21de'

down_revision = None

from alembic import op

import sqlalchemy as sa

def upgrade():

### commands auto generated by Alembic - please adjust! ###

pass

### end Alembic commands ###

def downgrade():

### commands auto generated by Alembic - please adjust! ###

pass

### end Alembic commands ###

运行

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from listpull import manager

manager.run()

listpull / .py

# -*- coding: utf-8 -*-

# pylint: disable-msg=C0103

""" listpull module """

from flask import Flask

from flask.ext.sqlalchemy import SQLAlchemy

from flask.ext.script import Manager

from flask.ext.migrate import Migrate, MigrateCommand

from mom.client import SQLClient

from smartfocus.restclient import RESTClient

app = Flask(__name__)

app.config.from_object('config')

db = SQLAlchemy(app)

migrate = Migrate(app, db)

manager = Manager(app)

manager.add_command('db', MigrateCommand)

mom = SQLClient(app.config['MOM_HOST'],

app.config['MOM_USER'],

app.config['MOM_PASSWORD'],

app.config['MOM_DB'])

sf = RESTClient(app.config['SMARTFOCUS_URL'],

app.config['SMARTFOCUS_LOGIN'],

app.config['SMARTFOCUS_PASSWORD'],

app.config['SMARTFOCUS_KEY'])

import listpull.models

import listpull.views

更新

如果我通过运行shell ./run.py shell,然后执行do from listpull import *call db.create_all(),那么将获得以下架构:

mark.richman@MBP:~/code/nhs-listpull$ sqlite3 app.db 

-- Loading resources from /Users/mark.richman/.sqliterc

SQLite version 3.7.12 2012-04-03 19:43:07

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> .schema

CREATE TABLE job (

id INTEGER NOT NULL,

list_type_id INTEGER NOT NULL,

record_count INTEGER NOT NULL,

status INTEGER NOT NULL,

sf_job_id INTEGER NOT NULL,

created_at DATETIME NOT NULL,

compressed_csv BLOB,

PRIMARY KEY (id),

FOREIGN KEY(list_type_id) REFERENCES list_type (id)

);

CREATE TABLE list_type (

id INTEGER NOT NULL,

name VARCHAR(80) NOT NULL,

PRIMARY KEY (id),

UNIQUE (name)

);

sqlite>

不幸的是,迁移仍然无法进行。

回答:

当你调用migrate命令Flask-Migrate(或实际上在其下的Alembic)时,它将查看你的命令models.py并将其与数据库中的实际值进行比较。

你的迁移脚本为空的事实表明,你已通过Flask-Migrate无法控制的另一种方法(可能是通过调用Flask-SQLAlchemy的方法)更新了数据库以匹配你的模型db.create_all()

如果你的数据库中没有任何有价值的数据,请打开Python Shell并调用db.drop_all()以清空它,然后再次尝试自动迁移。

更新:我在这里安装了你的项目,并确认迁移对我来说工作正常:

(venv)[miguel@miguel-linux nhs-listpull]$ ./run.py db init

Creating directory /home/miguel/tmp/mark/nhs-listpull/migrations...done

Creating directory /home/miguel/tmp/mark/nhs-listpull/migrations/versions...done

Generating /home/miguel/tmp/mark/nhs-listpull/migrations/script.py.mako...done

Generating /home/miguel/tmp/mark/nhs-listpull/migrations/env.pyc...done

Generating /home/miguel/tmp/mark/nhs-listpull/migrations/env.py...done

Generating /home/miguel/tmp/mark/nhs-listpull/migrations/README...done

Generating /home/miguel/tmp/mark/nhs-listpull/migrations/alembic.ini...done

Please edit configuration/connection/logging settings in

'/home/miguel/tmp/mark/nhs-listpull/migrations/alembic.ini' before

proceeding.

(venv)[miguel@miguel-linux nhs-listpull]$ ./run.py db migrate

INFO [alembic.migration] Context impl SQLiteImpl.

INFO [alembic.migration] Will assume non-transactional DDL.

INFO [alembic.autogenerate] Detected added table 'list_type'

INFO [alembic.autogenerate] Detected added table 'job'

Generating /home/miguel/tmp/mark/nhs-

listpull/migrations/versions/48ff3456cfd3_.py...done

尝试重新签出,我认为你的设置正确。

以上是 Flask-Migrate不创建表 的全部内容, 来源链接: utcz.com/qa/434010.html

回到顶部