Flask web開發之路六
今天寫SQLAlchemy數據庫
首先介紹ORM的概念:
ORM,Object類,Relationship:關系,Mapping:映射,也就是模型關系映射
flask-sqlalchemy是一套ORM框架
ORM的好處:可以讓我們操作數據庫跟操作對象一樣,非常方便,因為一個表就抽象成一個類,一條數據就抽象成該類的一個對象
### Flask-SQLAlchemy的使用:
1. 初始化和設置數據庫配置信息:
* 使用flask_sqlalchemy中的SQLAlchemy進行初始化:
```
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
```
2. 設置配置信息:在`config.py`文件中添加以下配置信息:
```
# dialect+driver://username:password@host:port/database
DIALECT = ‘數據庫類型‘
DRIVER = ‘pymysql‘(python2.7是mysqldb)
USERNAME = ‘用戶名‘
PASSWORD = ‘密碼‘
HOST = ‘127.0.0.1‘
PORT = ‘3306‘
DATABASE = ‘數據庫名稱‘
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST
,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
```
3. 在主`app`文件中,添加配置文件:
```
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
```
4. 做測試,看有沒有問題:
```
db.create_all()
```
如果沒有報錯,說明配置沒有問題,如果有錯誤,可以根據錯誤進行修改。
### 使用Flask-SQLAlchemy創建模型與表的映射:
1. 模型需要繼承自`db.Model`,然後需要映射到表中的屬性,必須寫成`db.Column`的數據類型。
2. 數據類型:
* ‘db.Integer‘代表的是整形.
* ‘db.String‘代表的是‘varchar‘,需要指定最長的長度。
* `db.Text`代表的是`text`。
3. 其他參數:
* `primary_key`:代表的是將這個字段設置為主鍵。
* `autoincrement`:代表的是這個主鍵為自增長的。
* `nullable`:代表的是這個字段是否可以為空,默認可以為空,可以將這個值設置為`False`,在數據庫中,這個值就不能為空了。
4. 最後需要調用`db.create_all`來將模型真正的創建到數據庫中。
數據庫的增刪改查:
主app文件代碼如下:
from flask import Flask from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app) # article表: # create table article( # id int primary key autoincrement, # title varchar(100) not null, # content text not null, # ) 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() @app.route(‘/‘) def hello_world(): # #增加: article1 = Article(title=‘aaa‘,content=‘bbb‘) db.session.add(article1) #事務 db.session.commit() # #查 # # select * from article where title=‘aaa‘; # result = Article.query.filter(Article.title ==‘aaa‘).all() # article1 = result[0] # print(article1.title,article1.content) # #改: # #1.先把你要更改的數據查找出來 # article1 = Article.query.filter(Article.title == ‘aaa‘).first() # #2.把這條數據,按你需要的地方進行修改 # article1.title = ‘new title‘ # #3.做事務的提交 # db.session.commit() # #刪: # #1.把需要刪除的數據查找出來 # article1 = Article.query.filter(Article.content == ‘bbb‘).first() # #2.把這條數據刪除掉 # db.session.delete(article1) # #3.做事務提交 # db.session.commit() return ‘Hello World!‘ if __name__ == ‘__main__‘: app.run()
### Flask-SQLAlchemy數據的增、刪、改、查:
1. 增:
```
# 增加:
article1 = Article(title=‘aaa‘,content=‘bbb‘)
db.session.add(article1)
# 事務
db.session.commit()
```
註意,這裏數據庫的操作都在主視圖函數裏執行,因此只有在打開網頁的情況下,數據庫的操作才能被執行
2. 查:
```
# 查
# select * from article where article.title=‘aaa‘;
article1 = Article.query.filter(Article.title == ‘aaa‘).first()
print ‘title:%s‘ % article1.title
print ‘content:%s‘ % article1.content
```
3. 改:
```
# 改:
# 1. 先把你要更改的數據查找出來
article1 = Article.query.filter(Article.title == ‘aaa‘).first()
# 2. 把這條數據,你需要修改的地方進行修改
article1.title = ‘new title‘
# 3. 做事務的提交
db.session.commit()
```
4. 刪:
```
# 刪
# 1. 把需要刪除的數據查找出來
article1 = Article.query.filter(Article.content == ‘bbb‘).first()
# 2. 把這條數據刪除掉
db.session.delete(article1)
# 3. 做事務提交
db.session.commit()
```
Flask web開發之路六