關(guān)于Flask數(shù)據(jù)庫
- Flask沒有指定使用的數(shù)據(jù)庫,不像django提供了orm數(shù)據(jù)庫抽象層,可以直接采用對象的方式操作數(shù)據(jù)庫。但為了開發(fā)效率,在開發(fā)Flask項目中一般會選擇 SQLALchemy 來操作數(shù)據(jù)庫,類似django的ORM.
- SQLALchemy實際是對數(shù)據(jù)庫的抽象,讓開發(fā)者不直接使用sql語句進(jìn)行開發(fā),而是通過Python對象來操作數(shù)據(jù)庫。
以下所有的操作都在PyCharm中進(jìn)行
flask連接sqlite
1. 下載安裝
- 安裝flask
pip install flask
- 安裝 Flask-SQLAlchemy
pip install Flask-SQLAlchemy
2. 設(shè)置連接
== flask連接sqlite數(shù)據(jù)庫(以下可能會報錯,請注意注釋!)==
1. 代碼
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
# 【1】注釋以下兩行后可能會報錯: RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.
# app_ctx = app.app_context()
# app_ctx.push()
class BaseConfig():
DEBUG = True
# 獲取項目目錄
APP_PATH = os.path.dirname(__file__)
# sqlite數(shù)據(jù)庫url
SQLALCHEMY_DATABASE_URI = f'sqlite:///{APP_PATH}/database'
app.config.from_object(BaseConfig)
# 創(chuàng)建數(shù)據(jù)庫連接,管理項目
db = SQLAlchemy(app)
class User(db.Model): #模型類繼承db.Model
"""創(chuàng)建User表"""
# SQLAlchemy 需要手動執(zhí)行主鍵列,第一個參數(shù)是 字段類型,第二個參數(shù)是約束條件
id = db.Column(db.INTEGER, primary_key=True)
username = db.Column(db.String(50))
password = db.Column(db.String(40))
# 【2】若想增加一個字段,run之后并沒有加入表中,可以先刪除表,再run,然后刷新即可加入(因為該表已存在,不會重新創(chuàng)建表了)
# desc = db.Column(db.String(40))
if __name__ == '__main__':
# 【3】刪除所有表,注意這條是危險命令,會將模型類對應(yīng)數(shù)據(jù)庫中的表物理刪除。在實際生產(chǎn)環(huán)境下勿用。
# db.drop_all()
db.create_all() # 創(chuàng)建所有的表
2. pycharm中操作sqlite
問題分析
- 注釋【1】問題:RuntimeError: Working outside of application context.
直接運(yùn)行以上代碼,會發(fā)現(xiàn)報錯“RuntimeError: Working outside of application context.”(下圖),需要撤銷注釋【1】
解決:請看大神操作
- 運(yùn)行之前
- 再次運(yùn)行,會發(fā)現(xiàn)出現(xiàn)了數(shù)據(jù)庫
- 注釋【2】問題:如何新增字段?
- 新增一條字段后,運(yùn)行,刷新表后并沒有顯示新增字段,
- 將注釋【3】撤銷,再運(yùn)行,刷新表后就可發(fā)現(xiàn)新增的字段名。
3. 附:配制鍵 & 常用數(shù)據(jù)庫的鏈接URI
1. Flask-SQLAlchemy 配置鍵
2. 常用數(shù)據(jù)庫的鏈接URI
URI: 統(tǒng)一資源標(biāo)識符,用于標(biāo)識某一互聯(lián)網(wǎng)資源名稱的字符串
數(shù)據(jù)庫 | URI |
---|---|
MySQL | mysql://username:password@hostname/database |
Postgres | postgresql://username:password@hostname/database |
SQLite (Unix) | sqlite:python/data/database |
SQLite (Windows) | sqlite:///c:/db/data/database |
Oracle | oracle://scott:tiger@127.0.0.1:1521/sidname |
字段說明:
username: 登錄數(shù)據(jù)庫的用戶名
password: 登錄數(shù)據(jù)庫的密碼
hostname:服務(wù)器主機(jī)ip,可以是本地主機(jī)(localhost)也可以是遠(yuǎn)程服務(wù)器
database:表示要使用的數(shù)據(jù)庫
在ubuntu中連接mysql要先創(chuàng)建數(shù)據(jù)庫:
先在mysql中創(chuàng)建數(shù)據(jù)庫:# 連接mysql mysql -uroot -pmysql # 查看所有數(shù)據(jù)庫 show databases; # 創(chuàng)建數(shù)據(jù)庫名為 py create database py charset=utf8;
flask連接mysql
1. 安裝pymysql
pip install pymysql # 首先保證安裝有mysql應(yīng)用程序
2. flask連接mysql
- 代碼
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 不加以下兩行可能會報錯 RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.
app_ctx = app.app_context()
app_ctx.push()
class BaseConfig():
DEBUG = True
# 獲取項目目錄
APP_PATH = os.path.dirname(__file__)
# sqlite數(shù)據(jù)庫url
# SQLALCHEMY_DATABASE_URI = f'sqlite:///{APP_PATH}/database'
# mysql數(shù)據(jù)庫url
SQLALCHEMY_DATABASE_URI = 'mysql://username:password@hostname/database' # 填寫自己mysql數(shù)據(jù)庫的用戶名,密碼,主機(jī)IP端口,數(shù)據(jù)庫名 例如:hostname:127.0.0.1:3306
app.config.from_object(BaseConfig)
# 創(chuàng)建數(shù)據(jù)庫連接,管理項目
db = SQLAlchemy(app)
class User(db.Model): #模型類繼承db.Model
id = db.Column(db.INTEGER, primary_key=True)
username = db.Column(db.String(50))
password = db.Column(db.String(40))
# desc = db.Column(db.String(40)) # 增加一個字段 run后沒有加入表中,要先刪除表,再run,然后刷新表
if __name__ == '__main__':
# 刪除所有表
# db.drop_all()
db.create_all() # 創(chuàng)建所有的表
- 連接mysql
1. 先創(chuàng)建一個數(shù)據(jù)庫
2. pycharm中操作mysql
文章來源:http://www.zghlxwxcb.cn/news/detail-824700.html
- 測試連接時,如果出現(xiàn)了如下報錯:Server returns invalid timezone. Need to set ‘serverTimezone’ property.
![]()
- 原因:時區(qū)不一致,MySQL驅(qū)動中默認(rèn)時區(qū)是UTC,與本地時間(中國)相差8個小時。
GMT(Greenwich Mean Time):格林威治標(biāo)準(zhǔn)時間
UTC:世界標(biāo)準(zhǔn)時間
CST(China Standard Time):中國標(biāo)準(zhǔn)時間
GMT + 8 = UTC + 8 = CST
- 方法:
點擊Set time zone,在UTC后+8(或者改為GMT)![]()
3. 連接成功
文章來源地址http://www.zghlxwxcb.cn/news/detail-824700.html
到了這里,關(guān)于flask筆記 02 | Flask數(shù)據(jù)庫連接(sqlite、mysql)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!