zoukankan      html  css  js  c++  java
  • 【Flask】ORM关系以及一对多

    ### ORM关系以及一对多:
    mysql级别的外键,还不够ORM,必须拿到一个表的外键,然后通过这个外键再去另外一张表中查找,这样太麻烦了。SQLAlchemy提供了一个`relationship`,这个类可以定义属性,以后在访问相关联的表的时候就直接可以通过属性访问的方式就可以访问得到了。示例代码:

     1 # coding:utf-8
     2 # Author: liangjun.chen
     3 
     4 
     5 from sqlalchemy import create_engine, Column, Integer, String, Text, ForeignKey
     6 
     7 from sqlalchemy.ext.declarative import declarative_base
     8 from sqlalchemy.orm import sessionmaker, relationship, backref
     9 
    10 HOSTNAME = '127.0.0.1'
    11 PORT = 3306
    12 DATABASE = 'sqlalchemy_first'
    13 USERNAME = 'root'
    14 PASSWORD = '123456'
    15 
    16 DB_URI = 'mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}?charset=utf8'.format(
    17         username=USERNAME, password=PASSWORD, host=HOSTNAME, port=PORT, dbname=DATABASE
    18 )
    19 engine = create_engine(DB_URI)
    20 Base = declarative_base(engine)
    21 Session = sessionmaker(engine)
    22 session = Session()
    23 
    24 
    25 # user
    26 class User(Base):
    27     __tablename__ = 'user'
    28     id = Column(Integer, primary_key=True, autoincrement=True)
    29     username = Column(String(50), nullable=False)
    30 
    31     # articles = relationship("Article")
    32 
    33     def __repr__(self):
    34         return "User <username: {}>".format(self.username)
    35 
    36 
    37 # article
    38 class Article(Base):
    39     __tablename__ = 'article'
    40     id = Column(Integer, primary_key=True,autoincrement=True)
    41     title = Column(String(50), nullable=False)
    42     conent = Column(Text, nullable=False)
    43     uid = Column(Integer, ForeignKey("user.id", ondelete="RESTRICT"))
    44 
    45     # relation 正向引用, backref反向引用
    46     author = relationship("User", backref='articles')
    47 
    48     def __repr__(self):
    49         return "Article <title: {}>".format(self.title)
    50 # Base.metadata.drop_all()
    51 # Base.metadata.create_all()
    52 #
    53 # user = User(username='saber')
    54 # session.add(user)
    55 # session.commit()
    56 #
    57 # article = Article(title='abd', conent='123', uid=1)
    58 # session.add(article)
    59 # session.commit()
    60 
    61 article = session.query(Article).first()
    62 uid = article.uid
    63 user = session.query(User).get(uid)
    64 print article
    65 print uid
    66 print user
    67 
    68 print "-"*20
    69 article = session.query(Article).first()
    70 print article.author.username
    71 
    72 print '-'*20
    73 user = session.query(User).first()
    74 print user.articles
  • 相关阅读:
    SDN网络笔记【毕设-SDN网络】
    Latex笔记【Latex】
    小米路由器 3G 开启SSH 安装 MT 工具箱 【环境搭建,小米路由器】
    windows 下安装linux子系统及其可视化【Linux】
    11月1日数据结构讨论班 【杂】
    简单远程遥控程序【网络程序设计
    VPS使用小结【VPS】
    vim使用总结【Vim】
    域名解析【网络程序设计
    MySQL数据库修改字段名、字段类型、字段长度
  • 原文地址:https://www.cnblogs.com/chen0427/p/8666861.html
Copyright © 2011-2022 走看看