sqlalchemy创建MySQL_Table

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值