Flask数据库_表关系之一对一

Flask数据库_表关系之一对一

一.一对一关系介绍

简单地理解就是:表1关联表2,可以通过设置外键约束来指定,是通过表1可以查到表2的数据,还是通过表2查到表1的数据!

二.实例

db_utils.py:
#coding=utf-8


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:
#coding=utf-8

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',uselist=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'))
    # login_user = relationship('LoginUser',backref=backref('User',uselist=False))

    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__':
    # Base.metadata.create_all()
    # create_data()
    query_data()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值