SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(sqlite,mysql,postgres, mongodb等),在这里记录基本用法和学习笔记
一、安装
通过pip安装
1 |
$ pip install SQLAlchemy |
二、使用
首先是连接到数据库,SQLALchemy支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用的有
1 2 3 4 |
mysql://username:password@hostname/database postgresql://username:password@hostname/database sqlite:////absolute/path/to/database sqlite:///c:/absolute/path/to/database |
更多连接字符串的介绍参见这里
下面是连接和使用sqlite数据库的例子
1. connection
使用传统的connection的方式连接和操作数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from sqlalchemy import create_engine # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:///:memory:' # 创建数据库引擎,echo为True,会打印所有的sql语句 engine = create_engine(DB_CONNECT_STRING, echo=True) # 创建一个connection,这里的使用方式与python自带的sqlite的使用方式类似 with engine.connect() as con: # 执行sql语句,如果是增删改,则直接生效,不需要commit rs = con.execute('SELECT 5') data = rs.fetchone()[0] print "Data: %s" % data |
与python自带的sqlite不同,这里不需要Cursor光标,执行sql语句不需要commit
2. connection事务
使用事务可以进行批量提交和回滚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from sqlalchemy import create_engine # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:////Users/zhengxiankai/Desktop/Document/db.sqlite' engine = create_engine(DB_CONNECT_STRING, echo=True) with engine.connect() as connection: trans = connection.begin() try: r1 = connection.execute("select * from User") r2 = connection.execute("insert into User(name, age) values(?, ?)", 'bomo', 24) trans.commit() except: trans.rollback() raise |
3. session
connection是一般使用数据库的方式,sqlalchemy还提供了另一种操作数据库的方式,通过session对象,session可以记录和跟踪数据的改变,在适当的时候提交,并且支持强大的ORM的功能,下面是基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:////Users/zhengxiankai/Desktop/Document/db.sqlite' # 创建数据库引擎,echo为True,会打印所有的sql语句 engine = create_engine(DB_CONNECT_STRING, echo=True) # 创建会话类 DB_Session = sessionmaker(bind=engine) # 创建会话对象 session = DB_Session() # dosomething with session # 用完记得关闭,也可以用with session.close() |
上面创建了一个session对象,接下来可以操作数据库了,session也支持通过sql语句操作数据库
1 |
$ pip install SQLAlchemy |
二、使用
首先是连接到数据库,SQLALchemy支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用的有
1 2 3 4 |
mysql://username:password@hostname/database postgresql://username:password@hostname/database sqlite:////absolute/path/to/database sqlite:///c:/absolute/path/to/database |
更多连接字符串的介绍参见这里
下面是连接和使用sqlite数据库的例子
1. connection
使用传统的connection的方式连接和操作数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from sqlalchemy import create_engine # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:///:memory:' # 创建数据库引擎,echo为True,会打印所有的sql语句 engine = create_engine(DB_CONNECT_STRING, echo=True) # 创建一个connection,这里的使用方式与python自带的sqlite的使用方式类似 with engine.connect() as con: # 执行sql语句,如果是增删改,则直接生效,不需要commit rs = con.execute('SELECT 5') data = rs.fetchone()[0] print "Data: %s" % data |
与python自带的sqlite不同,这里不需要Cursor光标,执行sql语句不需要commit
2. connection事务
使用事务可以进行批量提交和回滚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from sqlalchemy import create_engine # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:////Users/zhengxiankai/Desktop/Document/db.sqlite' engine = create_engine(DB_CONNECT_STRING, echo=True) with engine.connect() as connection: trans = connection.begin() try: r1 = connection.execute("select * from User") r2 = connection.execute("insert into User(name, age) values(?, ?)", 'bomo', 24) trans.commit() except: trans.rollback() raise |
3. session
connection是一般使用数据库的方式,sqlalchemy还提供了另一种操作数据库的方式,通过session对象,session可以记录和跟踪数据的改变,在适当的时候提交,并且支持强大的ORM的功能,下面是基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 数据库连接字符串 DB_CONNECT_STRING = 'sqlite:////Users/zhengxiankai/Desktop/Document/db.sqlite' # 创建数据库引擎,echo为True,会打印所有的sql语句 engine = create_engine(DB_CONNECT_STRING, echo=True) # 创建会话类 DB_Session = sessionmaker(bind=engine) # 创建会话对象 session = DB_Session() # dosomething with session # 用完记得关闭,也可以用with session.close() |
上面创建了一个session对象,接下来可以操作数据库了,session也支持通过sql语句操作数据库