flask-sqlalchemy的一對多、 一對一的 relationship的屬性backref的使用


#encoding: utf-8

from sqlalchemy import create_engine,Column,Integer,Float,Boolean,DECIMAL,Enum,Date,DateTime,Time,String,Text,func,and_,or_,ForeignKey
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
# 在Python3中才有這個enum模塊,在python2中沒有
import enum
from datetime import datetime
import random

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = '123456'

# dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8mb4".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine = create_engine(DB_URI)

Base = declarative_base(engine)

session = sessionmaker(engine)()

# 父表 / 從表
# user/article

class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(50),nullable=False)


def __repr__(self):
return "<User(username:%s)>" % self.username

# 上面的user是用戶表、下面的UserExtend表是用戶表的一些 不常用字段、比如學校、哪里人、這些字段、為了讓每一次數據庫讀取的時候省時間、把他單獨拿出來寫一個UserExtend,(User和UserExtend是一對一對應的uselist=False)
class UserExtend(Base):
__tablename__ = 'user_extend'
id = Column(Integer, primary_key=True, autoincrement=True)
school = Column(String(50))
uid = Column(Integer,ForeignKey("user.id"))

# (重點)uselist 默認是一個list 這樣他默認就是一對多、 寫成uselist=False就只能去一一對應
user = relationship("User",backref = backref("extend", uselist=False))

#添加一個用戶



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

author = relationship("User",backref="articles")

def __repr__(self):
return "<Article(title:%s,content:%s)>" % (self.title,self.content)

Base.metadata.drop_all()
Base.metadata.create_all()



# 一對多添加實例 70-80行

# #添加一個用戶
# user = User(username='小明')
#
# #添加兩個文章 多個文章
# article1 = Article(title = "xxxxxxxxxx",content = "222")
# article2 = Article(title = "eeeeeeee",content = "3333")
#
# #把文章的作者添加成小明 從一的一方添加文章
# user.articles.append(article1)
# user.articles.append(article2)
# session.add(user)
# session.commit()
#
# #一對多添加 從多的一方進行添加
# u1 = User(username = "書壘")
# article3 = Article(title = "aaaaaaaa",content = "*9999")
# article3.author = u1
# session.add(article3)
# session.commit()


# 這樣就實現了 一對一情況下的relationship的添加,主要要寫上 relationship 的屬性uselist=False
user = User(username='哇咔咔')
extend = UserExtend(school = "人民大學")
user.extend = extend

session.add(user)
session.commit()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM