一、sqlalchemy数据库中多对多的关系,主要有下面三个步骤
定义一个中间表保存两个表的主键定义多对多关系的两个表的模型给每个模型都添加一个访问对方的属性注意在relationship中指定中间表
二、代码如下:
from sqlalchemy
import create_engine, Column, String, Integer, ForeignKey, Table
from sqlalchemy.ext.declarative
import declarative_base
from sqlalchemy.orm
import sessionmaker, relationship
DB_URI =
"mysql+mysqldb://root:root@127.0.0.1:3306/python?charset=utf8"
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()
teacher_classes = Table(
"teacher_classes",
Base.metadata,
Column(
"teacher_id", Integer, ForeignKey(
"teacher.id"), nullable=
False, primary_key=
True),
Column(
"classes_id", Integer, ForeignKey(
"classes.id"), nullable=
False, primary_key=
True)
)
class Teacher(Base):
__tablename__ =
"teacher"
id = Column(Integer, primary_key=
True, autoincrement=
True)
teacher_name = Column(String(
100))
classes = relationship(
"Classes", secondary=teacher_classes)
def __repr__(self):
return "<Teacher id='%s' teacher_name='%s'>" % (self.id, self.teacher_name)
class Classes(Base):
__tablename__ =
"classes"
id = Column(Integer, primary_key=
True, autoincrement=
True)
classes_name = Column(String(
100))
teacher = relationship(
"Teacher", secondary=teacher_classes)
def __repr__(self):
return "<Classes id='%s' classes_name='%s'>" % (self.id, self.classes_name)
Base.metadata.create_all()
teacher1 = Teacher(teacher_name=
'admin')
teacher2 = Teacher(teacher_name=
'grunt')
teacher3 = Teacher(teacher_name=
'shuihen')
classes1 = Classes(classes_name=
"java")
classes2 = Classes(classes_name=
"python")
classes = session.query(Classes).get(
1)
print classes.teacher
teacher = session.query(Teacher).get(
3)
print teacher.classes
转载请注明原文地址: https://ju.6miu.com/read-33925.html