赞
踩
提示:【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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。