Flask数据库_表关系之一对一
一.一对一关系介绍
简单地理解就是:表1关联表2,可以通过设置外键约束来指定,是通过表1可以查到表2的数据,还是通过表2查到表1的数据!
二.实例
db_utils.py:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
USER = 'root'
PWD = 'root'
HOST = '127.0.0.1'
PORT = 3306
DATA_BASE = 'flask_db'
DB_URL = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
engine = create_engine(DB_URL)
Base = declarative_base(engine)
Session = sessionmaker(engine)
main.py:
from collections import UserList
from db_utils import Base,Session
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import relationship,backref
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',backref=backref('LoginUser',uselist=False))
def __repr__(self) -> str:
return f'<LoginUser:(id:{self.id} uname:{self.uname} passwd:{self.passwd})>'
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'))
def __repr__(self) -> str:
return f'<User:(id:{self.id} name:{self.name} gender:{self.gender} address:{self.address} login_id:{self.login_id})>'
def create_data():
login = LoginUser(uname='xx',passwd='123')
user = User(name='hh',gender='n',address='bj',login_id=1)
login.user = user
with Session() as s:
s.add(login)
s.commit()
def query_data():
with Session() as s:
l = s.query(LoginUser).first()
print(l.user)
if __name__ == '__main__':
query_data()