SQLAlchemy 操作数据库

参考文档 https://www.ctolib.com/topics-96759.html

1 简介

1.1 对象关系映射 ORM

SQLAlchemy 是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具。对象关系映射 用户使用Python定义的类 与 数据库中的表相关联的一种方式,类的实例则对应数据表中的一行数据,对应关系如下:

SQLAlchemy SQL
Python定义类 数据表
类的实例 行数据

SQLAlchemy包括了一套 将对象中的变化同步到数据库表中 的系统,这套系统被称之为工作单元(unit of work),同时也提供了 使用类查询来实现数据库查询 以及 查询表之间关系 的功能。

1.2 版本检查

检查当前使用的 SQLAlchemy 的版本,可能存在版本不一样结果有偏差的情况,本质上原理基本一致的

In [1]: import sqlalchemy
In [2]: sqlalchemy.__version__
Out[2]: '1.2.1'

2 简单操作实例

2.1 数据库 增删查改

# 导入相关数据包
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, Integer, String, equence

engine = create_engine('sqlite:///test.db', echo=True)
Base = declarative_base()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))
    def __repr__(self):
        return "<User(name='%s', fullname='%s', password='%s')>" % (self.name, self.fullname, self.password)

Base.metadata.create_all(engine)

# 实例化一个对象,并赋值
ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')

# 创建会话链接,并关联引擎
Session = sessionmaker(bind=engine)
# 创建一个session实例
session = Session()

# 将数据添加到seesion中


2.2 seesion内的高级操作

3 详细操作解释【这部分内容还没有时间很细节地查看】

3.1 创建链接引擎 Create Engine

这篇教程中我们使用sqlite数据库来演示操作,我们使用create_engine()来连接需要操作的数据库:

# 注意: 这里需要先新建一个 sqlite 的本地数据库文件 
# PS C:\Users\Administrator> sqlite3 test.db

In [3]: from sqlalchemy import create_engine
In [4]: engine = create_engine('sqlite:///test.db', echo=True)

echo 参数是用来设置SQLAlchemy日志的,通过Python标准库logging模块实现。设置为True的时候我们可以看见所以的操作记录。如果你在按照本教程进行学习,那么你可以将它设置为False来减少日志的输出。

create_engine() 的返回值是Engine的一个实例,此实例代表了操作数据库的核心接口,通过方言来处理数据库和数据库的API。在本例中,SQLite方言将被翻译成Python内置的sqlite3模块(个人理解,方言指的是每一种数据库的使用的方言,比方说mysql会有一种,sqlite又会有一种,而每种语言又会有很多在数据库的处理模块,比方说刚刚提到的Python内置的sqlite3模块)。

当第一次调用 Engine.execute() 或者 Engine.connect() 这种方法的时候,引擎(Engine)会和数据库建立一个真正的DBAPI连接,用来执行SQL语句。但是在创建了连接之后,我们很少直接使用Engine来操作数据库,更多的会使用ORM这种方式来操作数据库,这种方式在下面我们会看见具体的例子。

3.2 声明映射关系 Declare a Mapping

当使用 ORM 的时候,配置过程以描述数据库的表来开始,然后我们定义与之匹配的类。在现在的 SQLAlchemy 中,这两个过程一般结合在一起,通过一个称之为声明(Declarative)的系统实现。这个系统帮我们定义类以及实现与表的对应。

声明系统实现类与表的对应是通过一系列基类实现的—即声明基类(declarative base class)。我们的应用程序经常只有一个此基类的示例。使用declarative_base()函数,如下:

In [5]: from sqlalchemy.ext.declarative import declarative_base
In [6]: Base = declarative_base()

有了 Base 之后,我们可通过他定义任何数量的映射类。我们以一个 User表 来开始这个教程,User表 记录了用我们应用的终端用户的信息。与之对应的类称之为User。表的信息包括表名,姓名,还有列的数据类型,如下:

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __repr__(self):
       return "<User(name='%s', fullname='%s', password='%s')>" % (self.name
  • 4
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLAlchemy是一个Python的SQL工具和对象关系映射(ORM)库,它提供了一种连接和操作数据库的方式。下面是使用SQLAlchemy连接数据库的基本步骤: 1. 安装SQLAlchemy库:可以使用pip命令进行安装,如`pip install sqlalchemy`。 2. 导入SQLAlchemy模块:在Python脚本中导入SQLAlchemy模块,如`import sqlalchemy`。 3. 创建数据库引擎:使用`create_engine()`函数创建一个数据库引擎对象,该对象用于连接数据库。引擎对象需要指定数据库的连接字符串,例如: ```python from sqlalchemy import create_engine engine = create_engine('数据库连接字符串') ``` 4. 创建会话:使用`sessionmaker()`函数创建一个会话工厂对象,该对象用于创建会话。会话是与数据库进行交互的主要接口。例如: ```python from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) ``` 5. 连接数据库:使用会话工厂对象创建一个会话实例,通过该实例可以执行SQL语句和事务操作。例如: ```python session = Session() ``` 6. 执行SQL语句:使用会话对象执行SQL语句,可以使用SQLAlchemy提供的ORM功能进行对象关系映射操作,也可以直接执行原生的SQL语句。例如: ```python # 使用ORM功能 result = session.query(User).filter(User.name == 'Alice').all() # 执行原生SQL语句 result = session.execute("SELECT * FROM users") ``` 7. 提交事务和关闭会话:在完成数据库操作后,需要提交事务并关闭会话。例如: ```python session.commit() session.close() ``` 这是SQLAlchemy连接数据库的基本流程,具体的操作和使用方式可以根据实际需求进行调整和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值