python调用数据库经常使用到的第三方包
这里来说一下怎么创建数据库
首先比较关键的是 declarative_base,假定声明性基类。
Representation这个是我自己定义的一个类,是里面可以自己看着需求写好一些方法,数据模型继承后,续开发不需要重复写冗余的代码。
to_dict是为了可以把一个对象装换成字典,也就是数据封装
table_args 是表配置,可以配置引擎,编码,表注释
参考官网: https://www.osgeo.cn/sqlalchemy/orm/declarative_tables.html
from datetime import datetime, date,time
from sqlalchemy import Column, VARCHAR, BIGINT, DATETIME, func
from sqlalchemy.orm import declarative_base
from sqlalchemy import inspect
from etc.common import DATETIME_FORMAT, DATE_FORMAT, TIME_FORMAT
from etc.database import DATABASE_AUTH_CONF_ORIGIN_STR
class Representation(object):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def __repr__(self):
return str(self.to_dict())
def __str__(self):
return str(self.to_dict())
def to_dict(self) -> dict:
"""
转Python字典
:return: Python字典类型的数据库数据
"""
dict_ = self.__dict__.copy()
if '_sa_instance_state' in dict_:
del dict_['_sa_instance_state']
if '_updatable' in dict_:
del dict_['_updatable']
dict_ = self.to_format(dict_)
return dict_
def to_format(self, dict_: dict):
"""
把时间格式转换成
:param dict_: 进行时间转换的字典
:return: 字典
"""
for item in dict_:
if isinstance(dict_[item], datetime):
dict_[item] = dict_[item].strftime(DATETIME_FORMAT)
elif isinstance(dict_[item], date):
dict_[item] = dict_[item].strftime(DATE_FORMAT)
elif isinstance(dict_[item], time):
dict_[item] = dict_[item].strftime(TIME_FORMAT)
return dict_
@classmethod
def get_attr(cls):
"""
:return:
"""
key_values = [(k, v) for k, v in inspect(cls).c.items()]
return [{"label": item[0], "prop": item[1].comment} for item in key_values]
Base = declarative_base()
class User(Base, Representation):
__tablename__ = 'user'
__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8mb4',
'mysql_comment': '测试用户表'
}
id = Column(BIGINT, name="id", comment="主键", primary_key=True)
name = Column(VARCHAR(32), nullable=False, name="name", comment="姓名")
update_time = Column(DATETIME, default=func.now(), name="update_time", comment="更新时间,默认现在时间")
if __name__ == '__main__':
from sqlalchemy import create_engine
engine = create_engine(DATABASE_AUTH_CONF_ORIGIN_STR)
Base.metadata.create_all(engine)