儘管mysql預設約束型別為restric,但若不設定從表中關聯列的nullable=false,那麼通過sqlalchemy的orm刪除資料不會報錯!!
class
user
(base)
: __tablename__ =
'user'
id= column(integer,primary_key=
true
,autoincrement=
true
) username= column(string(50)
,nullable=
false
) articles = relationship(
"article"
,backref=
"tags"
)def
__repr__
(self)
:return
""% self.title
class
article
(base)
: __tablename__ =
'article'
id= column(integer,primary_key=
true
,autoincrement=
true
) title= column(string(50)
,nullable=
false
) uid = column(integer,foreignkey(
"user.id"))
author = relationship(
"user"
,backref =
"articles"
)def
__repr__
(self)
:return
""% self.title
base.metadata.drop_all(
)base.metadata.create_all(
)#新增一條資料
user = user(username=
'zhiliao'
)article = article(title=
'hello world'
)article.author = user
session.add(article)
session.commit(
)#儘管mysql預設約束型別為restric,但用sqlalchemy的orm刪除資料不會報錯!!實際步驟為:檢測到有外來鍵關聯,但發現外來鍵型別為restrict,因此先通過外來鍵找到關聯的資料,將關聯的uid設定為null,之後再刪除user。
user = session.query(user)
.first(
)session.delete(user)
session.commit(
)#要防止誤刪時restrict沒用,應該在建立外來鍵時設定nullable=false。
class
article
(base)
: __tablename__ =
'article'
id= column(integer,primary_key=
true
,autoincrement=
true
) title= column(string(50)
,nullable=
false
) uid = column(integer,foreignkey(
"user.id"
),nullable=
false
) author = relationship(
"user"
,backref =
"articles"
)
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 ...
Flask資料庫操作ORM隨筆 DB URL
貼 class person object name 111 age 18 country person類 資料庫中的一張表 person屬性 資料庫中的一張表的字段 person類的乙個物件 資料庫中表的一天資料 模型 orm 資料庫 from sqlalchemy import create e...
資料庫層面的鎖
那是一種行級鎖,一旦使用者對某個行施加了行級加鎖,則該使用者可以查詢也可以更新被加鎖的資料行,其它使用者只能查詢但不能更新被加鎖的資料行 如果其它使用者想更新該表中的資料行,則也必須對該錶施加行級鎖 即使多個使用者對乙個表均使用了共享更新,但也不允許兩個事務同時對乙個表進行更新,真正對錶進行更新時,...