网站建设需要会,做pc端网站平台,重庆网站页面优化,0453信息网免费发布文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系
1:1#xff0c;表A 中的一条记录#xff0c;仅对应表B中的一条记录#xff1b;表B的一条记录#xff0c;仅对应表A的一条记录。1:m#xff0c;表A中的一条记录#xff0c;对应表B中的多条记录#xff0c;表B中的一条记录… 文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系
1:1表A 中的一条记录仅对应表B中的一条记录表B的一条记录仅对应表A的一条记录。1:m表A中的一条记录对应表B中的多条记录表B中的一条记录仅对应表A的中的一条多的一方创建外键m:n 表A 中的一条记录可对应表B中的多条记录表B的一条记录也可对应表A的多条记录。 ORM表示 1v1
pass ORM表示 1vm
表结构 创建模型类
from sqlalchemy import Column, Integer, Float, String, Enum, ForeignKey, VARCHAR
from sqlalchemy.dialects.mysql import VARCHAR
from sqlalchemy.orm import declarative_base, relationship, Session, sessionmaker # sessionmaker返回一个会话类
from sqlalchemy import create_engine# base class
Base declarative_base()# Address
class Address(Base):__tablename__ address_tid Column(Integer, primary_keyTrue)# 地址字段 mysql数据库使用VARCHAR类型其他使用String类型title Column(address, String(50).with_variant(VARCHAR(50, charsetutf8), mysql), nullableFalse)# 外键user_id Column(Integer, ForeignKey(user_t.id), nullableTrue)# 关系(非表字段)模型类之间的引用# back_populates 双向的 反向引用通过属性# cascade 级联动作 delete-orphan 表示子表断开引用主表时删除记录仅用于1m 中1的一方user relationship(User, back_populatesaddresses)def __repr__(self): # 打印对象时的输出return f{self.title}# User
class User(Base):__tablename__ user_tid Column(Integer, primary_keyTrue)name Column(String(30), uniqueTrue)fullname Column(String(50))# 枚举sex Column(Enum(male, female, namesex)) age Column(Integer)role_id Column(Integer, ForeignKey(role_t.id), nullableTrue)# 关系addresses relationship(Address, back_populatesuser, cascadeall, delete-orphan)role relationship(Role, back_populatesusers)def __repr__(self):return f{self.name}# Role
class Role(Base):__tablename__ role_tid Column(Integer, primary_keyTrue)name Column(String(30), uniqueTrue)# 关系users relationship(User, back_populatesrole)def __repr__(self):return f{self.name!r}# 创建懒连接
sqlalchemy_database_uri postgresql://user:pwip:port/dbxx
engine create_engine(sqlalchemy_database_uri, echoTrue)
# 删除所有的表
Base.metadata.drop_all(engine)
# 创建所有的表
Base.metadata.create_all(engine)
# 创建会话
with Session(engine) as session:jack User(namejack, fullname张三, sexmale, age34, addresses[Address(title北京), Address(title河南)])tom User(nametom, fullname李四, sexfemale, age25, addresses[Address(title武汉)])# 创建角色 role Role(name老师, users[jack, tom])# 仅仅添加一个****主表记录**** 即可子表记录 连带添加session.add(role)session.commit() # 事务的最终提交主表记录插入时连带子表记录一起插入。