SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(sqlite,mysql,postgres, mongodb等),在这里记录基本用法和学习笔记
通过pip安装
| 1 | $ pip install SQLAlchemy |
首先是连接到数据库,SQLALchemy支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用的有
| 1234 | mysql://username:password@hostname/databasepostgresql://username:password@hostname/databasesqlite:////absolute/path/to/databasesqlite:///c:/absolute/path/to/database |
更多连接字符串的介绍参见这里
下面是连接和使用sqlite数据库的例子
使用传统的connection的方式连接和操作数据库
| 1234567891011121314 | 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
使用事务可以进行批量提交和回滚
| 123456789101112131415 | 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 |
connection是一般使用数据库的方式,sqlalchemy还提供了另一种操作数据库的方式,通过session对象,session可以记录和跟踪数据的改变,在适当的时候提交,并且支持强大的ORM的功能,下面是基本使用
| 12345678910111213141516171819 | from sqlalchemy import create_enginefrom 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 # 用完记得关闭,也可以用withsession.close() |
上面创建了一个session对象,接下来可以操作数据库了,session也支持通过sql语句操作数据库
| 1 | $ pip install SQLAlchemy |
首先是连接到数据库,SQLALchemy支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用的有
| 1234 | mysql://username:password@hostname/databasepostgresql://username:password@hostname/databasesqlite:////absolute/path/to/databasesqlite:///c:/absolute/path/to/database |
更多连接字符串的介绍参见这里
下面是连接和使用sqlite数据库的例子
使用传统的connection的方式连接和操作数据库
| 1234567891011121314 | 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
使用事务可以进行批量提交和回滚
| 123456789101112131415 | 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 |
connection是一般使用数据库的方式,sqlalchemy还提供了另一种操作数据库的方式,通过session对象,session可以记录和跟踪数据的改变,在适当的时候提交,并且支持强大的ORM的功能,下面是基本使用
| 12345678910111213141516171819 | from sqlalchemy import create_enginefrom 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 # 用完记得关闭,也可以用withsession.close() |
上面创建了一个session对象,接下来可以操作数据库了,session也支持通过sql语句操作数据库