Python的ORM框架SQLAlchemy入门教程
发布时间:2020-12-17 07:26:57 所属栏目:Python 来源:网络整理
导读:SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。 一 安装 SQLAlchemy 复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: import sqlalchemy sqlalchemy.__version__ '
复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: >>> import sqlalchemy
>>> sqlalchemy.__version__ '0.9.1' >>> 二 使用 sqlalchemy对数据库操作 复制代码 代码如下: (env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsql$ python Python 2.7.3 (default,Apr 10 2013,05:13:16) [GCC 4.7.2] on linux2 Type "help","copyright","credits" or "license" for more information. >>> from sqlalchemy import * >>> from sqlalchemy.orm import * >>> engine = create_engine('sqlite:///./sqlalchemy.db',echo=True) # 定义引擎 >>> metadata = MetaData(engine) # 绑定元信息 >>> 2.创建表格,初始化数据库 复制代码 代码如下: >>> users_table = Table('users',metadata, ... Column('id',Integer,primary_key=True), ... Column('name',String(40)), ... Column('email',String(120))) >>> >>> users_table.create() 2014-01-09 10:03:32,436 INFO sqlalchemy.engine.base.Engine CREATE TABLE users ( id INTEGER NOT NULL, name VARCHAR(40), email VARCHAR(120), PRIMARY KEY (id) ) 2014-01-09 10:03:32,436 INFO sqlalchemy.engine.base.Engine () 2014-01-09 10:03:32,575 INFO sqlalchemy.engine.base.Engine COMMIT >>> 执行上述代码,我们就创建 一个 users 表,有id, name, email 三个字段 复制代码 代码如下: (env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsql$ sqlite3 sqlalchemy.db SQLite version 3.7.13 2012-06-11 02:05:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables users sqlite> 3. 基本操作,插入 复制代码 代码如下: >>> from sqlalchemy import * >>> from sqlalchemy.orm import * >>> engine = create_engine('sqlite:///./sqlalchemy.db',echo=True) >>> metadata = MetaData(engine) >>> users_table = Table('users',autoload=True) 2014-01-09 10:20:01,580 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("users") 2014-01-09 10:20:01,581 INFO sqlalchemy.engine.base.Engine () 2014-01-09 10:20:01,582 INFO sqlalchemy.engine.base.Engine PRAGMA foreign_key_list("users") 2014-01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine () 2014-01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine PRAGMA index_list("users") 2014-01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine () >>> users_table Table('users',MetaData(bind=Engine(sqlite:///./sqlalchemy.db)),Column('id',INTEGER(),table=<users>,primary_key=True,nullable=False),Column('name',VARCHAR(length=40),table=<users>),Column('email',VARCHAR(length=120),schema=None) >>> 实例化一个插入句柄 复制代码 代码如下: >>> i = users_table.insert() >>> i <sqlalchemy.sql.dml.Insert object at 0x31bc850> >>> print i INSERT INTO users (id,name,email) VALUES (?,?,?) >>> i.execute(name='rsj217',email='rsj21@gmail.com') 2014-01-09 10:24:02,250 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name,?) 2014-01-09 10:24:02,250 INFO sqlalchemy.engine.base.Engine ('rsj217','rsj21@gmail.com') 2014-01-09 10:24:02,251 INFO sqlalchemy.engine.base.Engine COMMIT <sqlalchemy.engine.result.ResultProxy object at 0x31bce10> >>> i.execute({'name': 'ghost'},{'name': 'test'}) 2014-01-09 10:24:57,537 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name) VALUES (?) 2014-01-09 10:24:57,537 INFO sqlalchemy.engine.base.Engine (('ghost',),('test',)) 2014-01-09 10:24:57,537 INFO sqlalchemy.engine.base.Engine COMMIT <sqlalchemy.engine.result.ResultProxy object at 0x31bcd50> >>> 数据库内容为 复制代码 代码如下: sqlite> select * from users; 1|rsj217|rsj21@gmail.com 2|ghost| 3|test| sqlite> 查询 删除和插入类似 都需要先实例一个 sqlalchemy.sql.dml 对象 三 使用 ORM 复制代码 代码如下: >>> class User(object): ... def __repr__(self): ... return '%s(%r,%r)' % (self.__class__.__name__,self.name,self.email) ... >>> mapper(User,users_table) # 创建映射 <Mapper at 0x31bcfd0; User> >>> ul = User() >>> ul.name >>> print ul User(None,None) >>> print ul.name None >>> 建立会话
复制代码 代码如下: >>> session = create_session() >>> session <sqlalchemy.orm.session.Session object at 0x31bef10> >>> query = session.query(User) >>> query <sqlalchemy.orm.query.Query object at 0x31bee50> >>> u = query.filter_by(name='rsj217').first() 2014-01-09 10:44:23,809 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id,users.name AS users_name,users.email AS users_email FROM users WHERE users.name = ? LIMIT ? OFFSET ? 2014-01-09 10:44:23,809 INFO sqlalchemy.engine.base.Engine ('rsj217',1,0) >>> u.name u'rsj217' >>> 插入 复制代码 代码如下: >>> from sqlalchemy import * >>> from sqlalchemy.orm import * >>> engine = create_engine('sqlite:///./sqlalchemy.db') >>> metadata = MetaData(engine) >>> users_table = Table('users',autoload=True) >>> class User(object): pass ... >>> mapper(User,users_table) <Mapper at 0x18185d0; User> >>> Session = sessionmaker(bind=engine) >>> session = Session() >>> u = User() >>> u.name = 'new' >>> session.add(u) >>> session.flush() >>> session.commit() >>> 注意建立会话的方式, sqlalchemy 的版本不同 sessionmaker 的方式更好 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |