5. 外键
MySQL
mysql> select * from student; +----+------+---------------+--------+ | id | name | register_date | gender | +----+------+---------------+--------+ | 1 | s2 | 2015-03-01 | F | +----+------+---------------+--------+ 1 row in set (0.00 sec) mysql> select * from user; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | rain | 12345 | | 2 | leco | 666666 | +----+------+----------+ 2 rows in set (0.00 sec)
code
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DATE, Enum from sqlalchemy.orm import sessionmaker from sqlalchemy import func # 创建连接 engine = create_engine("mysql+pymysql://root:root@127.0.0.1/cmz", encoding='utf-8', echo=False) Base = declarative_base() # 生成ORM基类 # 创建表结构 class User(Base): __tablename__ = 'user' # 表名 id = Column(Integer, primary_key=True) name = Column(String(32)) password = Column(String(64)) class Student(Base): __tablename__ = 'student' # 表名 id = Column(Integer, primary_key=True) # 字段,整形,主键 column是导入的 name = Column(String(32), nullable=False) register_date = Column(DATE, nullable=False) gender = Column(String(32), nullable=False) def __repr__(self): return "<%s name:%s>" % (self.id, self.name) # 直接调用基类下的方法 Base.metadata.create_all(engine) # 实例与socket绑定,创建与数据库的绘画session class,注意,这里返回 # 给session的是一个class,不是实例 Session_class = sessionmaker(bind=engine) # 生成session实例,cursor Session = Session_class() # s1 = Student(name="s2", register_date="2015-03-01", gender="F") # Session.add(s1) print(Session.query(User, Student).filter(User.id == Student.id).all()) print(Session.query(User, Student).filter(User.id == Student.id).first()) Session.commit()
执行结果
[(<__main__.User object at 0x000002717E36D8D0>, <1 name:s2>)] (<__main__.User object at 0x000001CF04082320>, s2)