sqlalchemy 外键

Posted lucifer77

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlalchemy 外键相关的知识,希望对你有一定的参考价值。

建表

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

from sqlalchemy import Column,INT,VARCHAR,ForeignKey
from sqlalchemy.orm import relationship

class student(Base):
    __tablename__=student
    id=Column(INT,primary_key=True)
    name=Column(VARCHAR(64))
    school_id=Column(INT,ForeignKey(school.id))
    #stu2sch=relationship(school,backref=sch2stu) #本条在采用relationship插入数据是写入


class school(Base):
    __tablename__=school
    id=Column(INT,primary_key=True)
    name = Column(VARCHAR(64))

from sqlalchemy import  create_engine

engine=create_engine(mysql+pymysql://root:[email protected]:3306/sqlarchm?charset=utf8)

Base.metadata.create_all(engine)
# Base.metadata.drop_all(engine)

插入数据:

from sqlalchemy.orm import  sessionmaker
from create_table_foreignkey import engine,school,student

Session=sessionmaker(engine)
db_session=Session()

#笨方法
# sch_obj=school(name=‘dongnanya‘)
# db_session.add(sch_obj)
# db_session.commit()
#
# sch_obj=db_session.query(school).filter(school.name==‘dongnanya‘).first()
# student_obj=student(name=‘chaochao‘,school_id=sch_obj.id)
# db_session.add(student_obj)
# db_session.commit()
# db_session.close()

#利用relationship -正向

# stu_obj = student(name=‘LUCIFER‘,stu2sch=school(name=‘dongbeiya‘))
#
# db_session.add(stu_obj)
# db_session.commit()
# db_session.close()

#利用relationship -反向

sch_obj=school(name=xxy)
sch_obj.sch2stu=[student(name=beibei),student(name=huahua)]
db_session.add(sch_obj)

db_session.commit()

 查:

from sqlalchemy.orm import sessionmaker
from create_table_foreignkey import engine,student,school

Session=sessionmaker(engine)
db_session=Session()

#查询 笨
# sch_obj=db_session.query(school).filter(school.name==‘dongbeiya‘).first()
#
# stu_obj=db_session.query(student).filter(student.school_id==sch_obj.id).first()
#
# print(stu_obj.name,sch_obj.name)

#relationship 正向

# stu_obj=db_session.query(student).filter(student.name==‘LUCIFER‘).first()
# print(stu_obj.stu2sch.name,stu_obj.name)

#relationship 反向
sch_obj=db_session.query(school).all()
for row in sch_obj:
    for stu in row.sch2stu:
        print(row.name,stu.name)

删除和更新 没有简单操作

以上是关于sqlalchemy 外键的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLAlchemy 中引用同一表列的多个外键

SQLAlchemy ORM 不能使用复合外键

SQLAlchemy(三):外键连表关系

sqlalchemy外键和relationship查询

使用 SQLAlchemy 关系时是不是需要外键

SQLalchemy 找不到用于创建外键的表