• 【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
  • 相关阅读:
    【转】linux清屏的几种方法
    【转】Ubuntu 64位系统安装交叉编译环境一直提醒 没有那个文件或目录
    【转】无法获得锁 /var/lib/dpkg/lock
    层级原理图设计方法
    【转】gcc 编译使用动态链接库和静态链接库
    【转】设置 vim 显示行号永久有效
    【转】VMware 全屏显示
    emwin之自绘制 BUTTON 图形的一些问题
    使用 sizeof 获取字符串数组的大小
    emwin之2D图形流位图显示的方法
  • 原文地址:https://www.cnblogs.com/chen0427/p/8666861.html
Copyright © 2020-2023  润新知