# 调用Column创建字段 加类型
from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
# 调用操作链接,反查
from sqlalchemy.orm import relationship
# 调用基类Base
from sqlalchemy.ext.declarative import declarative_base
# 调用链接数据库
from sqlalchemy import create_engine
# 会话
from sqlalchemy.orm import sessionmaker
# 生成orm基类
engin = create_engine("mysql+pymysql://root:123456@localhost/aq?charset=utf8",encoding = 'utf-8')
Base = declarative_base() #[dɪˈklærətɪv] 宣言的,公布的
course_class = Table(
'course_dep',Base.metadata,
Column('course_id',Integer,ForeignKey('course.id')),
Column('class_name_id',Integer,ForeignKey('class_name.id'))
)
class Dep(Base):
__tablename__ = "class_name"
id = Column(Integer,primary_key=True)
class_name = Column(String(40),nullable=True)
class_choice = relationship("Student", backref="choice")
rela_s = relationship("Course",secondary = course_class,backref = 'c_c')
def __repr__(self):
return "< %s %s>" %(self.class_name,self.class_choice)
class Student(Base):
__tablename__ = "student"
id = Column(Integer,primary_key=True)
s_name = Column(String(40),nullable=True)
cls_id = Column(Integer,ForeignKey("class_name.id"))
cou_id = Column(Integer,ForeignKey("course.id"))
# 这个nb,允许你在user表里通过backref字段反向查出所有它在addresses表里的关联项
def __repr__(self):
return "< %s %s %s>" %(self.s_name,self.cls_id,self.cou_id)
class Course(Base):
__tablename__ = "course"
id = Column(Integer,primary_key=True)
c_name = Column(String(40),nullable=True)
class_c = relationship('Student',backref ='ituse')
def __repr__(self):
return self.c_name
Base.metadata.create_all(engin)
Session = sessionmaker(bind=engin)
session = Session()
c1 = Dep(class_name = 'c++')
c2 = Dep(class_name = 'go')
c3 = Dep(class_name = 'javascriput')
c4 = Dep(class_name = 'linux')
co1 = Course(c_name = 'base')
co2 = Course(c_name = 'zhongji')
co3 = Course(c_name = 'gaoji')
co4 = Course(c_name = 'dasheng')
c1.rela_s = [co1,co2,co3]
c2.rela_s = [co1,co2,co4]
#session.add_all([c1,c2,c3,c4])
#查询Java有好多人
dep_obj = session.query(Course).filter_by(c_name = 'Base').first()
print(dep_obj.c_name,dep_obj.class_c)
#查询高级课程和初级课程
cou_obj = session.query(Course).filter_by(id = 1).first()
print(cou_obj.course,)
#选alex 选择的什么课程
stu_obj = session.query(Student).filter_by(s_name = 'alex').first()
print(stu_obj.s_name)
session.commit()
这个是一个Python sqlalchemy 关系代码:
本人有几个问题不能理解,请大佬解答:
1、在两个表多对多的关系中,
rela_s = relationship("Course",secondary = course_class,backref = 'c_c')
这个关系设定,需要写到那个类中呢?有没有具体的要求呢?
2、在连接查询的时候,怎么查寻