Python SQLalchemy 基础操作之数据库增删改查

本文介绍了Python的ORM工具SQLAlchemy的基础使用,包括安装、数据库连接、ORM映射、创建数据表、会话操作、数据的增删改查等。通过示例展示了如何使用SQLAlchemy进行SQLite数据库的操作,强调了其简洁易读、可移植性和安全性。
摘要由CSDN通过智能技术生成

ORM全称ObjectRelationalMapping,即对象关系映射。简洁的说,ORM将数据库中的表与面向对象语言表达中的类创建了一类对应关系。那样,我们要操作数据库,数据库中的表或是表中的一条记录就可以直接根据操作类或是类案例来完成。

SQLAlchemy是Python社区最知名的ORM工具之一,为高效和性能的数据库访问设计方案,完成了完整的企业级持久模型。

SQLAlchemy优点:

  1. 简洁易读:将数据表抽象为对象(数据模型),更形象化易读。

  2. 可移植:封装了多种数据库引擎,应对多个数据库,实际操作基本相同,代码易维护。

  3. 更安全:有效避免SQL注入。

本文通过介绍Sqlite数据库的常见实际操作,来介绍一下SQLAlchemy的使用方法。SQLAlchemy具体的建立方式是将数据库表变换为Python类,其中数据列作为属性,数据库操作作为方法。

学习资料免费领取 60+ 名企内推资源倾情分享

SQLAlchem安装

Sqlite3是Python3标准库不需要另外安装,只需要安装SQLAlchemy即可。

pip install sqlalchemy

ORM 创建数据库连接

Sqlite3 创建数据库连接就是创建数据库,而其他MySQL等数据库,需要数据库已存在,才能创建数据库连接。

SQLite

以相对路径形式,在当前目录下创建数据库格式如下:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///AiTestOps.db')

以绝对路径形式创建数据库,格式如下:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///G:\python_sql\AiTestOps.db')

其它常用数据库的创建数据库连接方法

SQLAlchemy用一个字符串表示连接信息:

'数据库类型+数据库驱动名称://用户名:密码@IP地址:端口号/数据库名'

PostgreSQL数据库

from sqlalchemy import create_engine

# default, 连接串格式为 "数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库"
engine = create_engine('postgresql://username:password@127.0.0.1:9527/AiTestOps')
# psycopg2
engine = create_engine('postgresql+psycopg2://username:password@127.0.0.1:9527/AiTestOps')
# pg8000
engine = create_engine('postgresql+pg8000://username:password@127.0.0.1:9527/AiTestOps')

MySQL数据库

from sqlalchemy import create_engine

# default,连接串格式为 "数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库"
engine = create_engine('mysql://username:password@127.0.0.1:9527/AiTestOps')
# mysql-python
engine = create_engine('mysql+mysqldb://username:password@127.0.0.1:9527/AiTestOps')
# MySQL-connector-python
engine = create_engine('mysql+mysqlconnector://username:password@127.0.0.1:9527/AiTestOps')

Oracle数据库

from sqlalchemy import create_engine

# default,连接串格式为 "数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库"
engine = create_engine('oracle://username:password@127.0.0.1:9527/AiTestOps')
# cx_oracle
engine = create_engine('oracle+cx_oracle://username:password@127.0.0.1:9527/AiTestOps')

我们以在当前目录下创建SQLite数据库为例,后续各步同使用此数据库。我们在create_engine方法中补充了两个参数。如下:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///AiTestOps.db?check_same_thread=False', echo=True)
  • echo:echo默认为False,表示不打印执行的SQL语句等较详细的执行信息,改为Ture表示让其打印。
  • check_same_thread:check_same_thread默认为 False,sqlite默认建立的对象只能让建立该对象的线程使用,而sqlalchemy是多线程的,所以我们需要指定check_same_thread=False来让建立的对象任意线程都可使用。

定义映射(类与表的映射)

首先,我们建立基本映射类,后边具体的映射类(表)需要继承它。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

然后,创建具体的映射类,我们这里以Person映射类为例,我们把Person类映射到Person表。

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# 定义映射类Person,并继承 Base
class Person(Base):
    # 指定本类映射到 Person 表
    __tablename__ = 'Person'
    # 若有多个类指向同一张表,那么在后边的类需要把 extend_existing设为True,表示在已有列基础上进行扩展
    # 或者换句话说,sqlalchemy 允许类是表的字集,如下:
    # __table_args__ = {'extend_existing': True}
    # 若表在同一个数据库服务(datebase)的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值