SQLAlchemy学习01

127 阅读1分钟

目的

  1. 当库表已有的情况下,生成models做数据增删改查操作
  2. 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语句,用于调试

blog.csdn.net/fengbohello…

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
 

参考