利用数据库中的表反向生成python中的实体类

288 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

利用数据库中的表反向生成python中的实体类

要求python环境为3.8,3.7没有测试,3.6会报错如下内容:

/root/pyenv/lib/python3.6/site-packages/pymysql/_auth.py:8: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
from cryptography.hazmat.backends import default_backend
1.进入到虚拟环境中,安装相应的依赖
pip3 install flask-sqlacodegen
pip3 install PyMySQL
2.直接在虚拟环境中运行如下命令即可生成
  • 生成单表,是一张表生成一个py文件,一个文件一个类
flask-sqlacodegen "mysql+pymysql://root:123456@ip:端口/数据库名" --tables 表名 --outfile "user.py" --flask

生成之后如下所示:

# coding: utf-8
from flask_sqlalchemy import SQLAlchemy
​
class User(db.Model):
   __tablename__ = 'user'
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
   username = db.Column(db.String(32), info='用户名')
   password = db.Column(db.String(32), info='密码')
  • 生成多表,多个表的类在一个py文件中
flask-sqlacodegen "mysql+pymysql://root:123456@ip:端口/数据库名" --tables 表1名,表2名 --outfile "user.py" --flask
  • 将数据库中的所有表都生成,此种生成方法所有类都在一个py文件中
flask-sqlacodegen "mysql+pymysql://root:123456@ip:端口/数据库名" --outfile "user.py" --flask

生成之后结果展示如下:

# coding: utf-8
from flask_sqlalchemy import SQLAlchemy
​
class User(db.Model):
   __tablename__ = 'user'
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
   username = db.Column(db.String(32), info='用户名')
   password = db.Column(db.String(32), info='密码')
   
class Students(db.Model):
   __tablename__ = 'students'
   id = db.Column(db.Integer, primary_key=True)
   name = db.Column(db.String(16), info='学生姓名')
   stu_number = db.Column(db.String(16), info='学号')

其他注意事项

1.flask-sqlacodegen版本问题

旧版不会将comment的信息展示出来,最新版的flask-sqlacodegen可以将数据库表中每一行的的各种描述也展示出来,具体展示用上面的info来表示,若出现info后的内容都为问号的情况下,即为编码格式的问题,需要在上面的命令上加上编码charset=utf8mb4,具体如下:

flask-sqlacodegen "mysql+pymysql://root:123456@ip:端口/数据库名?charset=utf8mb4" --tables 表名 --outfile "user.py" --flask

2.flask-sqlacodegen和sqlacodegen问题

这两个依赖只能选择一个安装并使用,否则会报错,卸载掉一个即可

pip uninstall sqlacodegen

3.数据库中的表若没有设置主键,生成的py文件则是一个表的形式而不是类,具体表现如下:

# coding: utf-8
from sqlalchemy import Column, Float, String, Table
from flask_sqlalchemy import SQLAlchemy
​
db = SQLAlchemy()
​
t_traffic = db.Table(
  'traffic',
  db.Column('trafficID', db.String(12)),
  db.Column('roadName', db.String(12)),
  db.Column('length', db.String(12)),
  db.Column('station', db.Float),
)
​