目的
- 当库表已有的情况下,生成models做数据增删改查操作
- models查询出来对象转json,dict,用于后续操作
指定表 生成model.py 文件
sqlacodegen mysql+pymysql://user:password@127.0.0.1:3306/dbname --outfile=models.py
orm使用入门
zhuanlan.zhihu.com/p/120953101
关于如何打印出sql语句,用于调试
models 对象转dict
Base = declarative_base()
metadata = Base.metadata
class Models(Base):
__tablename__ = 'share_record_realtime'
__table_args__ = (
Index('idx_bosid_vid', 'bos_id', 'vid'),
{'comment': ''}
)
id = Column(BIGINT(20), primary_key=True, comment='')
bos_id = Column(BIGINT(20), nullable=False, comment='')
vid = Column(BIGINT(20), nullable=False, comment='')
# 单个对象
def to_dict(self):
result = {}
for key in self.__mapper__.c.keys():
if getattr(self, key) is not None:
result[key] = str(getattr(self, key))
else:
result[key] = getattr(self, key)
return result
# 多个对象
def dobule_to_dict(self):
result = {}
for key in self.__mapper__.c.keys():
if getattr(self, key) is not None:
result[key] = str(getattr(self, key))
else:
result[key] = getattr(self, key)
return result
Base.to_dict = to_dict
TODO
本意是想写个ModelExt类,然后models继承modelExt类,转换json,dict等方法写在modelExt类里面(如下代码块),但代码跑不通,又有新的任务过来,就先写个TODO,下次继续
Base = declarative_base()
metadata = Base.metadata
class Models(Base, ModelExt):
......
class ModelExt(object):
# 单个对象方法1
def to_dict(self):
model_dict = dict(self.__dict__)
del model_dict['_sa_instance_state']
return model_dict
# 单个对象方法2
def single_to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
# 多个对象
def dobule_to_dict(self, querySet):
result = []
for one_table in querySet:
result.append({c.name: getattr(self, c.name) for c in one_table})
return result
参考