首页 > 代码库 > automap
automap
<style>body,table { font-family: 微软雅黑; font-size: 10pt }
table { border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0 }
th { border: 1px solid gray; padding: 4px; background-color: #DDD }
td { border: 1px solid gray; padding: 4px }
tr:nth-child(2n) { background-color: #f8f8f8 }</style>
一、事先定义的表结构
- db_init.py
#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Boolean from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.orm import sessionmaker engine = create_engine("mysql+pymysql://root:redhat@192.168.10.209/db01?charset=utf8") Base = declarative_base() class Student(Base): __tablename__ = ‘student‘ id = Column(Integer, primary_key=True) name = Column(String(32), nullable=False) address = relationship(‘Address‘, backref=‘student‘) class Address(Base): __tablename__ = ‘address‘ id = Column(Integer, primary_key=True) u_id = Column(Integer, ForeignKey(‘student.id‘)) name = Column(String(32), nullable=False) # Base.metadata.drop_all(bind=engine) Base.metadata.create_all(bind=engine) session_cls = sessionmaker(bind=engine) session = session_cls() session.add_all([ Student(name=‘user1‘), Student(name=‘user2‘), Student(name=‘user3‘), Address(u_id=1, name=‘add-1‘), Address(u_id=2, name=‘add-2‘), Address(u_id=3, name=‘add-3‘), Address(u_id=3, name=‘add-4‘), ]) # session.commit() # 利用 backref查找,成功 ret = session.query(Address).filter(Address.u_id == 1).first().student.name print(ret)
二、不知道表结构
- automap.py # 注意,此处只是一对多,反射到了releastionsip,多对多没有测试成功,但是官网说可以
#!/usr/bin/env python # -*- coding:utf-8 -*- import random from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import Session from sqlalchemy.orm import relationship from sqlalchemy import create_engine # 初始化一个automap类 Base = automap_base() engine = create_engine("mysql+pymysql://root:redhat@192.168.10.209/db01?charset=utf8") Base.prepare(engine, reflect=True) # 反射所有的表 session = Session(engine) Student = Base.classes.student # 获取所需要的表 Address = Base.classes.address
# 利用表的backref 成功获取结果 ret = session.query(Address).filter(Address.u_id == 1).first().student.name print(ret)
automap
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。