当前位置:   article > 正文

SQLAlchemy 操作数据库

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'
  • 1
  • 2
  • 3

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中


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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)
  • 1
  • 2
  • 3
  • 4
  • 5

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()
  • 1
  • 2

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/613288
推荐阅读
相关标签
  

闽ICP备14008679号