relationship()的uselist参数默认为True,即一对多,如果要一对一,则需让uselist=False

准备工作

from sqlalchemy import create_engine,Column,Integer,String,Float,Text,ForeignKeyfromsqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker, relationship# 数据库信息host =127.0.0.1port =3306database =db_to_sqlalchemyusername=rootpassword =123456# 数据库类型+连接数据库的插件,这里使用的pymysqlDB_URI = fmysql+pymysql://{username}:{password}@{host}:{port}/{database}engine = create_engine(DB_URI)# 创建引擎Base= declarative_base(engine)# 使用declarative_base创建基类session = sessionmaker(engine)()

模型关系

class User(Base):

__tablename__ = user

id = Column(Integer, primary_key=True, autoincrement=True)

username = Column(String(50), nullable=Float) u_info = relationship(UserInfo, uselist=False) # 关闭一对多关系,即一对一 def __repr__(self):

return fUser(username: {self.username})class UserInfo(Base):

__tablename__ = user_info

id = Column(Integer, primary_key=True, autoincrement=True)

school = Column(String(50))

uid = Column(Integer, ForeignKey(user.id)) user = relationship(User)

Base.metadata.drop_all() # 删除所有表

Base.metadata.create_all() # 创建表user = User(username=abc)

info1 = UserInfo(school=xxxxx)

user.u_info = info1session.add(user)

session.commit()

若采用一对多的关系则会报错

优化

发表回复

后才能评论