当前位置:网站首页>sqlalchemy创建MySQL_Table
sqlalchemy创建MySQL_Table
2022-07-01 07:48:00 【皮卡大人】
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)
边栏推荐
- 【Flutter 问题系列第 72 篇】在 Flutter 中使用 Camera 插件拍的图片被拉伸问题的解决方案
- How relational databases work
- Apple account password auto fill
- Long way to go with technology
- 【无标题】
- go通用动态重试机制解决方案的实现与封装
- 长路漫漫、技术作伴
- ONES 创始人王颖奇对话《财富》(中文版):中国有没有优秀的软件?
- [软件] phantomjs屏幕截图
- Inftnews | from "avalanche" to Baidu "xirang", 16 major events of the meta universe in 30 years
猜你喜欢

Apple account password auto fill

IMDB practice of emotion classification (simplernn, LSTM, Gru)

Software testing methods and techniques - overview of basic knowledge

浏览器本地存储

【编程强训3】字符串中找出连续最长的数字串+数组中出现次数超过一半的数字

组件的自定义事件②

base64

Custom events of components ①

redisson使用全解——redisson官方文档+注释(中篇)

【批处理DOS-CMD-汇总】扩展变量-延迟变量cmd /v:on、cmd /v:off、setlocal enabledelayedexpansion、DisableDelayedExpansion
随机推荐
Gru of RNN
ONES 创始人王颖奇对话《财富》(中文版):中国有没有优秀的软件?
Redisson uses the full solution - redisson official documents + comments (Part 2)
038 network security JS
[software] phantomjs screenshot
Caesar
The database is locked. Is there a solution
Thesis learning -- Analysis and Research on similarity query of hydrological time series
力扣——求一组字符中的第一个回文字符
2022 electrician (intermediate) recurrent training question bank and answers
MATLAB之基础知识
[软件] phantomjs屏幕截图
【批处理DOS-CMD-汇总】扩展变量-延迟变量cmd /v:on、cmd /v:off、setlocal enabledelayedexpansion、DisableDelayedExpansion
[MySQL learning notes 28] storage function
Microsoft announces open source (Godel) language model chat robot
TCP/UDP 通信问题整理
[MySQL learning notes 25] SQL statement optimization
[MySQL learning notes27] stored procedure
软件测试方法和技术 - 基础知识概括
三极管是一项伟大的发明