Flask ORM 關係一對一

2022-08-09 03:18:15 字數 2994 閱讀 6420

### 一對一的關係:

在sqlalchemy中,如果想要將兩個模型對映成一對一的關係,那麼應該在父模型中,指定引用的時候,要傳遞乙個`uselist=false`這個引數進去。就是告訴父模型,以後引用這個從模型的時候,不再是乙個列表了,而是乙個物件了。示例**如下:

1

#coding:utf-82#

author: liangjun.chen34

5from sqlalchemy import

create_engine, column, integer, string, text, foreignkey67

from sqlalchemy.ext.declarative import

declarative_base

8from sqlalchemy.orm import

sessionmaker, relationship, backref

910 hostname = '

127.0.0.1

'11 port = 3306

12 database = '

sqlalchemy_first

'13 username = '

root

'14 password = '

123456'15

16 db_uri = '

mysql+pymysql://:@:/?charset=utf8

'.format(

17 username=username, password=password, host=hostname, port=port, dbname=database18)

19 engine =create_engine(db_uri)

20 base =declarative_base(engine)

21 session =sessionmaker(engine)

22 session =session()

232425#

user

26class

user(base):

27__tablename__ = '

user

'28 id = column(integer, primary_key=true, autoincrement=true)

29 username = column(string(50), nullable=false)

3031

#articles = relationship("article")

3233

def__repr__

(self):

34return

"user

".format(self.username)

353637#

userextent

38class

userextend(base):

39__tablename__ = '

userextend

'40 id = column(integer, primary_key=true, autoincrement=true)

41 school = column(string(50))

42 uid = column(integer, foreignkey("

user.id"))

4344 user = relationship("

user

", backref=backref("

extend

", uselist=false))

454647#

article

48class

article(base):

49__tablename__ = '

article

'50 id = column(integer, primary_key=true, autoincrement=true)

51 title = column(string(50), nullable=false)

52 conent = column(text, nullable=false)

53 uid = column(integer, foreignkey("

user.id

", ondelete="

restrict"))

5455

#relation 正向引用, backref反向引用

56 author = relationship("

user

", backref='

articles')

5758

def__repr__

(self):

59return

"article

".format(self.title)

6061

62base.metadata.drop_all()

63base.metadata.create_all()

6465

#一對多

66 user = user(username='

saber')

67#article1 = article(title='title1', conent='content1')68#

article2 = article(title='title2', conent='content2')69#

70#71#

72#session.add(user)73#

session.commit()

74print'-

' * 20

7576

#一對一, 多對一

77 extend1 = userextend(school='

tinghua')

78 user.extend =extend1

79session.add(user)

80 session.commit()

一對一關係

1 共享主鍵方式 共享主鍵方式就是限制兩個資料表的主鍵使用相同的值,通過主鍵形成一對一的對映關係。如 學員的登入帳號資訊和學員的詳細分別存放到兩張不同的表中。表 持久化類 public class student public class stupwd student.hbm.xml cascade...

一對一關係對映

主鍵關聯 兩個關聯的實體在表中具有相同的主鍵值,這個主鍵可只由其中乙個表生成,在另外乙個表中通過對映檔案中使用主鍵的foreign生成機制引用已經生成的主鍵值。student類 public class student public void setcard card card public stu...

一對一關係對映

兩端都需要配置 onetoone,但需要對映外來鍵維護關係的一端,額外新增 joincolumn 屬性。含有主鍵的一方預設是立即載入機制,但可以通過fetch 屬性調整,但是沒有主鍵的一端,無論如何更改fetch,都是立即載入,會額外傳送一條查詢語句。原因是,含有外來鍵的一方可以根據外來鍵判斷是否為...