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