1. 程式人生 > >Flask web開發之路六

Flask web開發之路六

RM AR rac 默認 行修改 mysq ase style mysqldb

今天寫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開發之路六