提示:【python轻量级中台框架开发第一层】 ORM flask-sqlacodegen
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
python轻量级中台框架开发是从业多年开始研究的第二类框架,此前使用donet core3.1 开发的 跳动数字-jump 微服务框架,由于多种原因并未开源,此次使用python-flask框架开发的轻量级框架考虑开源,希望想一起学习的网友一起指正点评。
提示:以下是本篇文章正文内容,下面案例可供参考
ORM是对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
它解决了对象和关系型数据库之间的数据交互问题。
键入如下命令(示例):
flask-sqlacodegen "mysql://root:root@localhost:3306/douyin"
--outfile "dbModel.py"
--flask
flask-sqlacodegen mysql数据的连接串
–outfile 输出文件路径 绝对路径
–flask 选项支持flask sqlalchemy语法。
需要安装依赖库:
flask_migrate
pip install flask_migrate=2.5.3
flask_script
pip install flask_script=2.0.6
代码如下 :
from flask import Flask
from exts import db
def create_app():
app = Flask(__name__)
app.config.from_object('config') # 使用模块的名字
db.init_app(app)
return app
if __name__ == '__main__':
app = create_app()
app.run(host='127.0.0.1', port=8000, debug=True)
#encoding:utf-8
import os
ADMIN_USER_ID = 'XXX'
MEMBER_USER_ID='XXX'
SECRET_KEY = os.urandom(24)
DEBUG=True
DB_USERNAME = 'root'
DB_PASSWORD = '28320071'
DB_HOST = '127.0.0.1'
DB_PORT = '3306'
DB_NAME = 'douyin'
DB_URI = 'mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8' % (DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO= False
WTF_CSRF_ENABLED = False#关闭CSRF保护
#上传到本地
UEDITOR_UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'static','images')
# encoding:utf-8
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
—这里只贴出models的部分代码。其他的数据库依次类推可以分不同模块导入。
提示:这里要说下迁移模型自己手动编写,类似概念模型但需要遵循方言使用的类型:
# encoding:utf-8
from exts import db
class Users(db.Model):
__tablename__ = 'tbuser'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
receiver_name = db.Column(db.String(100)) # 用户名
receiver_province = db.Column(db.String(100)) # 省
receiver_city = db.Column(db.String(100)) # 市
receiver_district = db.Column(db.String(100)) # 县
receiver_address = db.Column(db.String(500)) # 地址
receiver_mobile = db.Column(db.String(100)) # 电话
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
—最后是manager.py 这个Manager接收migrate更新数据库指令。
注:如果仅仅是定义类Model,直接命令更新数据库是不会更新的,需要运行时有调用到才会有效,引入(from app.models.Tag import Tag)该类后再执行更新指令才能更新成功。
注:在flask2.0 以上版本flask_script这个引用会一直飘红,解决方法我写在最后。
from flask_migrate import Migrate, MigrateCommand
from exts import db
from flask_script import Manager
from apps import create_app
import ConceptModel.admin.models #引入models库
app = create_app()
manager = Manager(app)
Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
好了,manager编写完了,那么如何生成Migrate?
初始化Migrate,只需要在终端输入两条命令:
python manager.py db init
python manager.py db migrate
完成后项目中会多出来一个 Migrate文件夹里面就是生成的指令库。
python manager.py db upgrade
执行生成数据库指令
终端输入执行升级数据库指令:python manager.py db upgrade,当然你也可以根据工程根目录下migrations目录中的不同版本降级更新数据库:python manager.py db downgrade
提示:这里对文章进行总结:
好了,到这里flask-sqlacodegen 生成数据库的两种方式都说完了,你们觉得那种更适用。
对于个人小项目我推荐使用第一种方法。对于商用或更广泛应用个人推荐使用code-first方式。因地制宜根据不同场景自行选择感谢阅读,本人会持续更新轻量级中台框架不断加入新的模块,未完待续。。。。
原因:
可能是更新了Flask2.0以上版本问题,导致Flask._compat的目录发生变化。
解决方法 1 :
使用如下命令降级:
pip install “Flask==1.1.4”
解决方法 2:
不降级修改原代码flask_script/init.py中from flask._compat import text_type 改成 from flask_script._compat import text_type