zoukankan      html  css  js  c++  java
  • 三十五:数据库之SQLAlchemy外建之一对多关系

    准备工作

    from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKey
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker

    # 数据库信息
    host = '127.0.0.1'
    port = '3306'
    database = 'db_to_sqlalchemy'
    username = 'root'
    password = '123456'

    # 数据库类型+连接数据库的插件,这里使用的pymysql
    DB_URI = f'mysql+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)

    def __repr__(self):
    return f'User(username: {self.username})'


    class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    content = Column(Text, nullable=Float)
    uid = Column(Integer, ForeignKey('user.id'))

    def __repr__(self):
    return f'Article(title:{self.title}, content:{self.content})'


    Base.metadata.create_all()

    user = User(username='aa')
    session.add(user)
    session.commit()

    article = Article(title='title2', content='123', uid=1)
    session.add(article)
    session.commit()

    通过文章拿user信息

    不使用外建查询方法

    使用外建:relationship

    通过user拿对应uid的文章信息

    以上方式需要在有外建关系的模型中都加relationship,比较麻烦,sqlalchemy提供了一个反向引用的方法:backref

    同样可以通过articles反向查找

    使用一对多插入数据

    反向添加:把user添加到从表

  • 相关阅读:
    CSRF小结
    代码注入小结
    文件上传漏洞小结
    解决Burpsuite_pro_v1.6破解版https证书导入问题
    Java HTTP 组件库选型看这篇就够了
    趣图:我正在演示一个功能,但没有达到预期效果
    阅读源码的利器——Intellij-IDEA-Replace-in-Path-使用技巧
    分享一些好用的 Chrome 插件!
    趣图:程序员发量的变化过程
    Spring循环依赖的三种方式
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11809310.html
Copyright © 2011-2022 走看看