在建立乙個模型的時候,一旦生成乙個表,就無法在模型中新增屬性,此時的解決辦法是,先在資料庫中刪除這張表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...