python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > SQLAlchemy使用

Python SQLAlchemy简介及基本用法

作者:码农青葱

SQLAlchemy是一个基于Python实现的ORM对象关系映射框架,该框架建立在DB API之上,使用关系对象映射进行数据库操作,这篇文章主要介绍了SQLAlchemy简介以及基本使用,需要的朋友可以参考下

SQLAlchemy库简单介绍

SQLAlchemy是一个基于Python实现的ORM对象关系映射框架。
该框架建立在DB API之上,使用关系对象映射进行数据库操作,将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

SQLAlchemy的下载安装

// 默认从官网下载安装PyMySQL库
pip3 install sqlalchemy
// 从豆瓣源下载安装PyMySQL库
pip3 install sqlalchemy -i https://pypi.douban.com/simple
// 从清华源下载安装PyMySQL库
pip3 install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple

SQLAlchemy的组件构成

SQLAlchemy ORM组成部分如下:
Object Relation Mapping(ORM):对象关系映射
SQLAlchemy Core组成部分如下:
Engine:框架的引擎
Connection Pooling:数据库连接池
Dialect:选择连接数据库的DB API种类
Schema/Types:架构和类型
SQL Exprression Language:SQL表达式语言
SQLAlchemy本身无法操作数据库,其必须以来PYMYSQL等第三方插件驱动,
Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,
从而实现对数据库的操作
MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html

配置数据库连接串

uri: dialect[+driver]://user:password@host/dbname[?key=value..]
- dialect:数据库,如:sqlite、mysql、oracle、postgresql等
- driver:数据库驱动,用于连接数据库,比如pymysql、mysqldb等
- username:数据库用户
- password:数据库密码
- host:数据库服务IP地址
- port:数据库服务端口
- database:数据库名
# 实例:MySQL + PyMySQL
# MySQL服务端配置信息
DB_INFO = dict(
    host="127.0.0.1",
    port=6379,
    user="admin",
    password="123456",
    database="test",
    charset="utf8"
)
# 数据库连接URL格式化
DB_URI = 'mysql+pymysql://{user}:{password}@{host}:{port}/{database}?charset={charset}'.format(**DB_INFO)

创建引擎并连接数据库

engine = create_engine("mysql+pymysql://root:123456@localhost:3306/db4?charset=utf8",
                        max_overflow=0,  # 超过连接池大小外最多创建的连接
                        pool_size=5,  # 连接池大小
                        pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
                        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
                        echo = True    # echo参数为True时,会显示每条执行的SQL语句,可以关闭 ",max_overflow = 5)
from sqlalchemy import create_engine
# 连接地址
DB_URI = 'mysql+pymysql://{user}:{password}@{host}:{port}/{database}?charset={charset}'
# 创建引擎
engine = create_engine(DB_URI)
# 打开连接
conn = engine.connect() 
# 执行查询
result = conn.execute('select * from user limit %s offset %s', 10, 2)
# 获取单条数据
data_line = result.fetchone()
# 获取多条数据
data_list = result.fetchmany(2)
# 获取全部数据
data_list = result.fetchall()
# 插入数据操作,获取最后行ID
last_row_id = result.lastrowid
# 关闭连接
conn.close()  

数据库对象映射模型

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
# 数据库连接地址
DB_URI = 'mysql+pymysql://{user}:{password}@{host}:{port}/{database}?charset={charset}'
# 创建数据库引擎
engine = create_engine(DB_URI)
# 模型基类
Base = declarative_base(engine)
session = sessionmaker(engine)()
class Student(Base):
    """功能:学生映射模型类"""
    __tablename__ = 'Student'
    id = Column(Integer, primary_key=True, autoincrement=True, comment="主键ID")
    name = Column(String(50), index=True, nullable=True, comment="学生名称")
    age = Column(Integer, comment="学生年龄")
    sex = Column(String(10), comment="学生性别")
# 创建全部表,默认自动跳过已存在表
Base.metadata.create_all()
# 创建指定表,默认自动跳过已存在表
Base.metadata.create_all(tables=[Student.__table__])
# 删除全部表,默认自动跳过不存在的表
Base.metadata.drop_all()
# 删除指定表,默认自动跳过不存在的表
Base.metadata.drop_all(tables=[Student.__table__])

到此这篇关于SQLAlchemy简介以及基本使用的文章就介绍到这了,更多相关SQLAlchemy基本使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文