【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

 

posted @ 2018-03-28 22:33  小小易拉罐  阅读(891)  评论(0编辑  收藏  举报