多對多的關係需要通過一張中間表
來繫結他們之間的關係。
先把兩個需要做多對多的模型定義
出來
使用table
定義乙個中間表,中間表一般就是包含兩個模型的外來鍵字段
就可以了,並且讓它們兩個來作為一復合主鍵
。
在兩個需要做多對多的模型中隨便選擇乙個模型,定義乙個relationship
屬性,來繫結三者之間的關係,在使用relationship
的時候,需要傳入乙個secondary=中間表物件名
。
from sqlalchemy import create_engine,column,integer,float,boolean,decimal,enum,\
date,datetime,time,string,text,func,or_,and_,foreignkey,table
from sqlalchemy.dialects.mysql import longtext
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
import random
hostname =
'127.0.0.1'
port =
'3306'
database =
'first_sqlalchemy'
username =
'root'
password =
'root'
db_uri =
"mysql+pymysql://:@:/?charset=utf8"\
.format
(username=username,password=password,host=hostname,port=port,db=database)
engine = create_engine(db_uri)
base = declarative_base(engine)
session = sessionmaker(engine)()
#表3 中間表
news_tag = table(
"news_tag"
, base.metadata,
column(
"news_id"
,integer,foreignkey(
"news.id"
),primary_key=
true),
column(
"tag_id"
,integer,foreignkey(
"tag.id"
),primary_key=
true))
#表1
class
news
(base)
: __tablename__ =
'news'
id= column(integer,primary_key=
true
,autoincrement=
true
) title = column(string(50)
,nullable=
false
)def
__repr__
(self)
:return
""% self.title
#表2
class
tag(base)
: __tablename__ =
'tag'
id= column(integer, primary_key=
true
, autoincrement=
true
) name = column(string(50)
, nullable=
false
)# 產生關係
newss = relationship(
"news"
,backref=
"tags"
,secondary=news_tag)
def__repr__
(self)
:return
""% self.name
base.metadata.drop_all(
) base.metadata.create_all(
)
Django資料之ORM外來鍵操作
如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。建立外來鍵 表一 class foo models.model name models.charfield max length 1 表二class business models.model id caption m...
flask框架3(資料庫ORM)
flask sqlalchemy 配置 其他配置 使用class user db.model tablename user id db.column db.integer,primary key true,autoincrement true name db.column db.string 50 ...
使用sqlalchemy的ORM建立外來鍵關聯時報錯
在學習使用sqlalchemy模組的時候踩了乙個坑,分享一下。我先用下面的語句建立了一張學生資訊表 create table student id int unsigned auto increment,name varchar 20 not null,age tinyint,primary key...