安装 SQLAlchemy
pip install SQLAlchemy
警告
从 SQLAlchemy 1.1 版开始,用 setuptools 安装 SQLAlchemy 需要使用 setup.py 文件,安装命令为
python setup.py install
,具体方式不再详述,请参照 SQLAlchemy 官方文档;还是从 1.1 版开始 SQLAlchemy 已经不再支持用 distutils 安装了。
SQLAlchemy 支持 C 语言扩展,可以运行更快、内存利用更优,安装时, SQLAlchemy 会查找操作系统是否有没有安装 C 语言编译器,如果没有 C 语言编译器,就会禁用 C 语言插件,并输出警告信息;如果安装了 C 语言编译器,就会自动创建相关支持。
如果不想安装 C 语言扩展插件,可使用 export DISABLE_SQLALCHEMY_CEXT=1; python setup.py install
语句。不过,禁用 C语言扩展插件会降低 SQLAlchemy 运行效率,如果以后需要使用 C 语言扩展插件优化代码时,需要提前测试。
警告
1.1 版已经移除了之前的
global-option=--without-cextensions
语句。
检查 SQLAlchemy 版本
使用sqlalchemy.__version__
命令可以查看 SQLAlchemy 的版本。
import sqlalchemy sqlalchemy.__version__
安装数据库驱动
SQLAlchemy 内置了 SQLite3,无需安装驱动。本文为了操作方便,使用的都是 SQLite 数据库。
除了SQLite 之外,SQLAlchemy 还支持MySQL、PostgreSQL、Oracle 等主流数据库,但是,关联这些数据库需使用符合 Python DBAPI 规范的驱动, 本文只介绍如何安装 与关联 PyMySQL。
首先,用 pip 命令安装 PyMySQL:
pip install PyMySQL
然后,再用以下语句进行关联:
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
提示
因为密码操作方式的变化, SQLAlchemy 仅支持 MySQL 4.1及以上版本,并且,某些特殊语句类型仅在特定版本的 MySQL 里生效。如果发现 SQLAlchemy 某些特定组件或函数在处理 MySQL 时不能正常运行,请查阅 MySQL 的文档。
安装好 SQLAlchemy 和 DBAPI 后,就可以创建 SQLAlchemy 与 数据库的连接引擎了。
关联数据库
用 SQLAlchemy 连接数据库需要创建 engine 对象。engine 对象提供对后端数据库的统一访问接口,让 Python 代码不用顾及不同数据库与 DBAPI 之间的区别。
连接字符串的内容
SQLAlchemy 提供了 create_engine 函数,只要设置连接字符串和可选的关键字就可以创建 engine 对象。连接字符串包括以下信息:
数据库的类型,如,SQLite、MySQL 等;
方言,如,Psycopg2、 PyMySQL 等;
认证信息,如用户名、密码,可选选项;
数据库的位置,SQLite 是一个文件,MySQL 等其它数据库为服务器的主机名称;
数据库服务器端口,可选选项;
数据库名称,可选选项。
创建连接 MySQL 的 engine 实例
虽然本文不打算使用 MySQL, 但是鉴于实际生产环境中 MySQL 大行其道,还是有必要了解一下如何为远程服务器上的 MySQL 数据库创建 engine 实例。
from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://刘备:魏蜀吴我最大'\ # 1'@mysql001.monster.internal/students', pool_recycle=3600) # 2
为了看得清楚,这里用的是中文,‘刘备’是用户名,‘魏蜀吴我最大’是密码;
pool_recylce
关键字说明 MySQL 多久后自动回收连接,默认情况下,空闲 8 小时后,MySQL 会关闭连接。为了避免这种情况,在创建 engine 实例时要使用关键字pool_recycle=3600
。
创建连接 SQLite 的 engine 实例
SQLite 的连接字符串指定了文件和存储位置。下面的代码,定义了 students.db 的数据库,并且展示了多种为 SQLite 创建引擎的方式。
from sqlalchemy import create_engine # 1engine1 = create_engine('sqlite:///:memory:', echo = True) # 3engine2 = create_engine('sqlite:///students.db') # 2engine3 = create_engine('sqlite:////home/ThreeKids/students.db') # 4engine4 = create_engine('sqlite:///c:\\Users\\ThreeKids\\students.db') # 5
从 SQLAlchemy 导入 create_engine 函数;
定义内存数据库;
用相对路径,将 students.db 存在与.py文件相同的文件夹;
指定在 unix 系统里 students.db 文件的完整路径;
指定在 Windows 系统里students.db 文件的完整路径。注意:在 Windows 里,连接字符串要写成 engine4 里的样子,除非用原始字符串(r''),否则使用\\才能正常转义文件路径的字符串。
提示
create_engine
函数返回的是 engine 实例,不过,调用查询等需要连接的行为前,SQLAlchemy 不会真正连接数据库。
create_engine 函数的可选关键字:
echo
这个关键字记录引擎处理的动作,诸如 SQL 语句及其参数。默认为 False
,在测试环境下可以设置为 True
,在生产环境下要设置为 False
。
encoding
这个关键字定义 SQLALchemy 使用的字符串编码,默认为 utf-8
,大对数 DBAPI 都默认支持这一编码,但它不会定义后端数据库自身使用的编码类型。
isolation_level
这个关键字指明 SQLAlchemy 使用的隔离层级。比如,PyMySQL 的 InnoDB 数据库默认值为 REPEATABLE READ
。
提示
用
isolation_level
关键字可以为任意给定的 DBAPI 设定隔离级别。
pool_recycle
这个关键字设置了回收数据库连接及超时的时限。这点对于 MySQL 尤为重要,因为 MySQL 的默认值为 -1,即没有超时。
连接数据库
初始化 engine 实例后,即可调用 connect
方法打开数据库连接。
connection = engine.connect()
连接好数据库后,就可以用 SQLALchemy 操控数据库了。不过,下一篇文章先为大家介绍 SQLALchemy 的数据类型。
作者:呆鸟的简书
链接:https://www.jianshu.com/p/cd90544efcae