SQLAlchemy外來鍵約束

2021-08-19 15:20:36 字數 3531 閱讀 5212

在建立乙個模型的時候,一旦生成乙個表,就無法在模型中新增屬性,此時的解決辦法是,先在資料庫中刪除這張表drop tables article;。然後重新執行。

1.外來鍵:

class

user

(db.model):

__tablename__ = 'user'

id = db.column

(db.integer,primary_key=true,autoincrement=true)

username = db.column

(db.string(100),nullable=false)

class

article

(db.model):

__tablename__ = 'article'

id = db.column

(db.integer, primary_key=true, autoincrement=true)

title = db.column

(db.string(100), nullable=false)

author_id = db.column

(db.integer, db.foreignkey('user.id'))

content = db.column

(db.text, nullable=false)

author = db.relationship('user',backref=db.backref('articles'))#正向與反向引用

2.author = db.relationship('user',backref=db.backref('articles'))解釋:

*給article這個模型新增乙個author屬性,可以訪問這篇文章的作者的資料,像訪問普通模型一樣。

*backref是定義反向引用,可以通過user.articles訪問這個模型所寫的所有文章。

db1.py

from flask import flask

from flask_sqlalchemy import sqlalchemy

import config

import pymysql

pymysql.install_as_mysqldb()

# class article(db.model):

# __tablename__ = 'article'

# id = db.column(db.integer,primary_key=true,autoincrement=true)

# title = db.column(db.string(100),nullable=false)

# content = db.column(db.text,nullable=false)

## db.create_all()

class

user

(db.model):

__tablename__ = 'user'

id = db.column(db.integer,primary_key=true,autoincrement=true)

username = db.column(db.string(100),nullable=false)

class

article

(db.model):

__tablename__ = 'article'

id = db.column(db.integer, primary_key=true, autoincrement=true)

title = db.column(db.string(100), nullable=false)

author_id = db.column(db.integer, db.foreignkey('user.id'))

content = db.column(db.text, nullable=false)

author = db.relationship('user',backref=db.backref('articles'))#正向與反向引用

db.create_all()

defhello_world

():#新增乙個使用者

# user1 = user(username='xww')

# db.session.add(user1)

# db.session.commit()

# 新增乙個文章

# article = article(title='aaa',content='bbb',author_id=1)

# db.session.add(article)

# db.session.commit()

# 找文章標題為aaa的作者

# article = article.query.filter(article.title=='aaa').first()

# author_id = article.author_id

# user = user.query.filter(user.id==author_id).first()

# print(user.username)

# 正向與反向引用

#查詢作者為xww的所有文章

# article.author

# author = user.query.filter(user.name == 'xww').first()

# author.articles

# article = article(title='aaa', content='bbb')

# article.author = user.query.filter(user.id==1).first()

# db.session.add(article)

# db.session.commit()

# 找文章標題為aaa的作者

# article = article.query.filter(article.title == 'aaa').first()

# print(article.author.username)

# 查詢作者為xww的所有文章

# article = article(title='111',content='222',author_id=1)

# db.session.add(article)

# db.session.commit()

user = user.query.filter(user.username == 'xww').first()

result = user.articles

for article in result:

print('-'*10)

print(article.title)

return

'hello world!'

if __name__ == '__main__':

mysql外來鍵和外來鍵約束

1.mysql中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引 2.如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主...

mysql 外來鍵和外來鍵約束

1.外來鍵 如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。就是a表的主鍵,被用到了b表中,此時它就成了外來鍵 2.外來鍵約束 如果想要插入或者更新外來鍵的值,資料庫會和引用表中字段的資料進行驗證,如果插入或更改的值不在被引用的表中,則插入失敗 外來鍵的作用就是保證...

外來鍵約束 外來鍵級聯操作

建立db2資料庫 create database db2 使用db2資料庫 use db2 外來鍵約束 標準語法 constraint 外鍵名 foreign key 本表外來鍵列名 references 主表名 主表主鍵列名 建表時新增外來鍵約束 建立user使用者表 create table u...