python sqlalchemy 多对多

# 调用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、在连接查询的时候,怎么查寻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值