Flask-SQLAlchemy 是 Flask 的一個擴展,它使得 Flask 用戶能夠方便無阻的使用 SQLAlchemy,而 SQLAlchemy 是 Python 最廣泛使用的 ORM(對象關系映射)框架。
ORM 是一種讓開發者以面向對象的方式操作數據庫的技術,無需寫 SQL 語句就可以進行數據的增刪改查等操作。
Flask-SQLAlchemy 封裝了 SQLAlchemy,并提供了更易用的 API。它還添加了一些其他有用的功能,如為 Flask 應用配置不同的數據庫連接和提供模型基類等。
以下是一個簡單的 Flask-SQLAlchemy 例子:
首先,你需要安裝 Flask-SQLAlchemy:
bash
Copy code
pip install flask-sqlalchemy
然后,在你的 Flask 應用代碼中:
python
Copy code
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' # 設置數據庫 URI
db = SQLAlchemy(app) # 初始化 SQLAlchemy 對象
#定義一個模型,模型必須繼承自 db.Model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # id 列,主鍵
username = db.Column(db.String(80), unique=True, nullable=False) # username 列
@app.route('/')
def index():
admin = User(username='admin') # 新建一個 User 對象
db.session.add(admin) # 添加到 session
db.session.commit() # commit 會話
return 'Hello, World!'
if __name__ == '__main__':
db.create_all() # 創建所有的表
app.run()
這個程序會創建一個 SQLite 數據庫,并在其中創建一個用戶表,在訪問 '/' 路徑時,會添加一個新的用戶 "admin" 并保存到數據庫。
注意:在真實的應用環境中,你應該安排一個合理的地方來進行數據庫的初始化操作(db.create_all()),并且要確保所有數據庫的操作(db.session.add(), db.session.commit())都在異常處理框架中進行。
## Oracle
Flask-SQLAlchemy 可以很容易地與 Oracle 數據庫一起使用。你只需要提供合適的數據庫 URI,然后 Flask-SQLAlchemy 就會處理剩下的事情。
首先,確保你已經安裝了 cx_Oracle 這個庫,它是 Python 訪問 Oracle 數據庫的接口。你可以使用 pip 來進行安裝:
sh
Copy code
pip install cx_Oracle
然后,在你的 Flask 應用代碼中,你可以像這樣配置你的 Oracle 數據庫連接:
python
Copy code
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 格式:oracle+cx_oracle://user:password@hostname/sid
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+cx_oracle://username:password@hostname/dbname'
db = SQLAlchemy(app)
# your application code here
if __name__ == '__main__':
app.run()
在這個示例中,你需要將 username, password, hostname, dbname 替換為你自己 Oracle 數據庫的用戶名,密碼,主機名和數據庫名稱。
然后你就可以像使用其他數據庫一樣使用 SQLAlchemy 了。SQLAlchemy 會自動處理 SQL 語句的生成和執行,它還提供了一個高級的 ORM 層來透明地處理數據的轉換。
如果你遇到任何連接問題,那可能是 Oracle 數據庫的驅動沒有安裝或者配置不正確,你應該檢查是否已經正確安裝了 cx_Oracle 以及 Oracle 數據庫的客戶端軟件。
pip download 命令默認會下載源代碼包(通常是.tar.gz 或 .zip 文件)。如果你想要下載二進制的 wheel 文件(.whl),你可以添加 --prefer-binary 選項,這樣 pip 就會優先下載二進制包。
bash
Copy code
pip download cx_Oracle --prefer-binary
這條命令將會下載 cx_Oracle 的 wheel 文件,如果它存在的話。
另外需要注意的是,pip 會根據運行它的 Python 版本和操作系統來選擇合適的 wheel 文件。因此,如果你是在一個與目標安裝環境不同的機器上下載文件,你可能需要指定 pip 下載與目標環境相匹配的 wheel 文件。
這可以通過 --python-version,--platform,--abi 和 --implementation 等選項來實現。例如:
bash
Copy code
pip download cx_Oracle --prefer-binary --python-version 35 --platform manylinux1_x86_64 --abi cp35m --implementation cp
這條命令會下載用于 Python 3.5,manylinux1_x86_64 平臺的 cx_Oracle 的 wheel 文件。你需要根據你的目標環境來替換這些參數。
但是,關于具體的版本、平臺、ABI 和實現,你需要參考 pip 的文檔,以及 cx_Oracle 在 PyPI 網站上的文件列表來決定最合適的參數。
如果你只能獲取到 cx\_Oracle 的`.tar.gz`文件形式的源代碼,你可以通過下面的步驟來進行手動安裝。
假設你已經下載了 cx\_Oracle 的`.tar.gz`文件到當前目錄,并且名為`cx_Oracle.tar.gz`。
你首先需要解壓這個壓縮包:
~~~
bashCopy codetar -xzvf cx_Oracle.tar.gz
~~~
這將會創建一個`cx_Oracle-<version>`的目錄,其中`<version>`是 cx\_Oracle 的版本號。
接下來,進入這個目錄并安裝 cx\_Oracle:
~~~
bashCopy codecd cx_Oracle-<version>
pip install .
~~~
這個`pip install .`命令將會在當前目錄下查找`setup.py`文件并安裝。
需要注意的是,從源碼編譯 cx\_Oracle 需要你首先安裝 Python 的開發文件(比如`python-dev`或`python-devel`等),同時在機器上還需要已經安裝并配置好的 Oracle 庫。你可以前往 Oracle 的官方網站下載安裝 Oracle Instant Client。
https://www.oracle.com/database/technologies/instant-client.html
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 格式:oracle+cx_oracle://user:password@hostname/sid
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+cx_oracle://username:password@hostname/dbname'
db = SQLAlchemy(app) # 初始化 SQLAlchemy 對象
#定義一個模型,模型必須繼承自 db.Model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # id 列,主鍵
username = db.Column(db.String(80), unique=True, nullable=False) # username 列
@app.route('/')
def index():
admin = User(username='admin') # 新建一個 User 對象
db.session.add(admin) # 添加到 session
db.session.commit() # commit 會話
return 'Hello, World!'
if __name__ == '__main__':
#db.create_all() # 創建所有的表
app.run()
```
## SQLLite
SQLite 是一種嵌入式的關系數據庫,它將整個數據庫(包括表,索引,觸發器和數據)存儲在一個單一的磁盤文件中。SQLite 支持 SQL 語法的大部分,使得它能夠處理各類數據存儲任務。
SQLite 的一些主要特點包括:
獨立:SQLite 不需要一個單獨的服務器進程或操作系統(它可以運行在 Windows,Linux,macOS 等)。數據都存儲在一單一的文件中,這使得它在管理和備份數據方面十分方便。
小型: SQLite 的庫(包含所有功能)大小在 250K 和 800K 之間(依據編譯方式),這使得它很適合嵌入到其他應用中。
便攜:數據庫文件可以在 32 位和 64 位機器之間自由可靠的共享,不受字節序或字結構影響。
功能完善:SQLite 支持大量的 SQL 語法和函數,包括事務、觸發器和視圖等等。
在 Python 中,SQLite 是內置支持的。你可以使用 sqlite3 模塊來創建、查詢和管理 SQLite 數據庫。以下是一個簡單的使用 sqlite3 的例子:
python
Copy code
import sqlite3
# 創建一個數據庫連接
conn = sqlite3.connect('example.db')
# 創建一個游標對象
c = conn.cursor()
# 創建一個表
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# 插入一行數據
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
# 提交當前的事務
conn.commit()
# 關閉連接
conn.close()
此段代碼先創建了一個 SQLite 數據庫文件 example.db,然后創建了一個 stocks 表,并向其中插入一行數據。
- 前言
- 1.入門篇
- Python介紹
- 安裝與使用
- Python開發利器之VS Code
- 模塊安裝
- 命令行
- 一次Python無法安裝模塊的問題探索與解決之旅
- 命令運行
- Conda
- 下載地址
- 2.基礎篇
- 基礎語法
- 輸入與輸出
- with as的用法
- 注釋
- Python命令行參數
- 編碼
- 變量類型
- 列表遍歷
- 運算符
- 表達式語句
- 條件
- 循環
- 日期和時間
- 函數
- 高級語法
- @符號-裝飾器
- 模塊和包
- name
- init.py
- 錯誤和異常
- 面向對象
- 3.專題篇
- 常用功能
- Python 字符串連接
- python web
- Python CGI編程
- Python OAuth2
- 認證 Flask-HTTPAuth
- 常用命令
- 內置函數
- dir()
- print(f)
- 標準模塊
- sys
- pickle-數據序列化
- os
- IO(輸入輸出)
- 鍵盤輸入
- 文件讀寫
- 測試
- Python測試框架之pytest快速入門
- pytest-bdd快速示例和問題解決
- 基于pytest-bdd的項目目錄結構和命名規范
- python BDD 的相關概念
- Behave介紹和快速示例
- Python BDD之Behave測試報告
- Python BDD 框架比較之 pytest-bdd vs behave
- pytest進階
- Flask + pytest測試
- 參考網址
- pytest-bdd進階
- hehave進階
- 測試路徑
- python + selunium
- HTML 根據多層CSS 查找元素
- 等待執行
- 使用text 查找 span
- pytest如何在控制臺輸出
- 4.問題篇
- pip pip3 及區別
- TypeError: can only concatenate str (not "NoneType") to str
- 5.實戰篇
- matplotlib-繪圖包
- 導入類
- 命名規范
- 模塊查找
- 6.進階篇
- Flask
- Flask介紹
- Flask擴展模塊
- Flask-Login
- 問題
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask實戰
- Flask 標準目錄結構
- Blueprints
- 參考
- FastAPI 測試
- https 證書 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate