Python全系列 教程
3567个小节阅读:5930k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在sqlalchemy中,如果想要将两个模型映射成一对一的关系,那么应该在父模型中,指定引用的时候,要传递一个uselist=False
这个参数进去。
就是告诉父模型,以后引用这个从模型的时候,不再是一个列表了,而是一个对象了
方法1
xxxxxxxxxx
class LoginUser(Base):
__tablename__ = 't_user_login'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(32),nullable=False)
passwd = Column(String(32),nullable=False)
user = relationship('User',uselist=False) # 不友好,总有警告
class User(Base):
__tablename__ = 't_user'
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False,name='name')
gender = Column(String(1))
address = Column(String(64))
login_id = Column(Integer,ForeignKey('t_user_login.id'))
login_user = relationship('LoginUser')
方法2
当然,也可以借助
sqlalchemy.orm.backref
来简化代码
xxxxxxxxxx
class LoginUser(Base):
__tablename__ = 't_user_login'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(32),nullable=False)
passwd = Column(String(32),nullable=False)
# 创建1对1的关系, 创建一个字段来做别一个表的标识(外键)
class User(Base):
__tablename__ = 't_user'
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False,name='name')
gender = Column(String(1))
address = Column(String(64))
login_id = Column(Integer,ForeignKey('t_user_login.id'))
login_user = relationship('LoginUser',backref=backref('user',uselist=False))
代码
xxxxxxxxxx
from sqlalchemy import Column,Integer,String,Text,ForeignKey
from sqlalchemy.orm import relationship,backref
from db_util import Base,Session
class LoginUser(Base):
__tablename__ = 't_user_login'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(32),nullable=False)
passwd = Column(String(32),nullable=False)
# user = relationship('User',uselist=False) # 不友好,总有警告
def __repr__(self):
return f'<User: id={self.id} uname={self.uname} passwd={self.passwd}>'
# 创建1对1的关系, 创建一个字段来做别一个表的标识(外键)
class User(Base):
__tablename__ = 't_user'
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False,name='name')
gender = Column(String(1))
address = Column(String(64))
login_id = Column(Integer,ForeignKey('t_user_login.id'))
login_user = relationship('LoginUser',backref=backref('user',uselist=False))
def __repr__(self):
return f'<User: id={self.id} name={self.name} gender={self.gender} address={self.address}>'
def create_data():
login = LoginUser(uname = 'baizhan', passwd = '123')
user = User(name='百战',gender = '女',address ='北京')
# login.user = user # 建立关联关系
user.login_user = login
with Session() as ses:
ses.add(user)
ses.commit()
def query_data():
# with Session() as ses:
# login = ses.query(LoginUser).first()
# print(login.user)
with Session() as ses:
user = ses.query(User).first()
print(user.login_user)
if __name__ == '__main__':
# Base.metadata.create_all()
# create_data()
query_data()
实时学习反馈
1. 在SQLAlchemy中,对表关系说法错误的是?
A relationship函数在1对1关系时,可以只写1边
B relationship函数在1对1关系时,可以2边都写1个
C relationship函数在1对1关系时,可以写在任意1边
D relationship函数在1对1关系时,必须2边各写1个
答案
1=>D