最近,我经历了同样的事情,另外一个挑战是在两个数据库之间链接模型。
我使用了Flask-SQLAlchemy,而我所要做的就是以与数据库表相同的方式定义模型。我发现困难的是弄清楚我的项目结构应该是什么样子。
我的项目是一个Restful API,这就是我最终得到的结果:
conf/
__init__.py
local.py
dev.py
stage.py
live.py
deploy/
#nginx, uwsgi config, etc
middleware/
authentication.py
app_name/
blueprints/
__init__.py
model_name.py #routes for model_name
...
models/
__init.py
model_name.py
__init__.py
database.py
tests/
unit/
test_etc.py
...
run.py
注意文件:
conf / xxx.py
这是我们告诉Flask-SQLAlchemy要连接的内容的方式,此外,您还可以在此处放置任何其他配置项(例如日志位置,调试配置等)。
SQLALCHEMY_DATABASE_URI = 'mysql://username:password@host:port/db_name'
app_name / __ init__.py
这是我创建我的应用程序并初始化数据库的地方。该数据库对象将被导入并在整个应用程序中使用(即在模型,测试等中)。我还设置了记录器,初始化了我的API和蓝图,并在此处附加了中间件(未显示)。
from app_name.database import db
from flask import Flask
def create_app(*args, **kwargs):
env = kwargs['env']
app = Flask(__name__)
app.config.from_object('conf.%s' % env)
db.init_app(app)
return app
app_name / database.py
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app_name / models / model_name.py
from services.database import db
class Bar(db.Model):
__tablename__ = 'your_MySQL_table_name'
id = db.Column('YourMySQLColumnName', db.Integer, primary_key=True)
name = db.Column('WhateverName', db.String(100))
foo = db.Column(db.ForeignKey('another_MySQLTableName.id'))
class Foo(db.Model):
__tablename__ = 'another_MySQLTableName'
id = db.Column('FooId', db.Integer, primary_key=True)
...
运行
from app_name import create_app
app = create_app(env='local')
if __name__ == '__main__':
app.run()
我曾经run.py
在本地运行该应用程序,但我使用了nginx + uWSGI在dev / stage / live环境中运行该应用程序。
我猜您views/
除了那里之外还会有一个目录。
init_db()
专门创建数据库的内容。那这种情况呢?谢谢阿吉安。:)