Python的ORM框架SQLAlchemy

API例子

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

print(sqlalchemy.__version__)
# # examples of connection http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#sqlalchemy.create_engine
engine = create_engine('sqlite:///foo.db', echo=True)

Base = declarative_base()

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, self.fullname, self.password)

Base.metadata.create_all(engine)

ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
print(ed_user)

Session = sessionmaker(bind=engine)
session = Session()
session.add(ed_user)
our_user = session.query(User).filter_by(name='ed').first()
# SELECT * FROM users WHERE name="ed" LIMIT 1;
print our_user
session.add_all([
     User(name='wendy', fullname='Wendy Williams', password='foobar'),
     User(name='mary', fullname='Mary Contrary', password='xxg527'),
     User(name='fred', fullname='Fred Flinstone', password='blah')])

session.commit()

print(session.query(User).filter_by(name='ed').first())
print(session.query(User).all())
for row in session.query(User).order_by(User.id):
    print(row)
for row in session.query(User).filter(User.name.in_(['ed', 'wendy', 'jack'])):
    print(row)
# for row in session.query(User).filter(~User.name.in_(['ed', 'wendy', 'jack'])):
#     print(row)
# print(session.query(User).filter(User.name == 'ed').count())
#
# from sqlalchemy import and_, or_
# for row in session.query(User).filter(and_(User.name == 'ed', User.fullname == 'Ed Jones')):
#     print(row)
# for row in session.query(User).filter(or_(User.name == 'ed', User.name == 'wendy')):
#     print(row)
#
# from sqlalchemy import ForeignKey
# from sqlalchemy.orm import relationship, backref
#
# class Address(Base):
#     __tablename__ = 'addresses'
#     id = Column(Integer, primary_key=True)
#     email_address = Column(String, nullable=False)
#     user_id = Column(Integer, ForeignKey('users.id'))
#
#     user = relationship("User", backref=backref('addresses', order_by=id))
#
#     def __repr__(self):
#         return "<Address(email_address='%s')>" % self.email_address
# # Base.metadata.create_all(engine)
# #
# jack = User(name='jack', fullname='Jack Bean', password='gjffdd')
# jack.addresses = [
#                 Address(email_address='jack@google.com'),
#                 Address(email_address='j25@yahoo.com')]
# session.add(jack)
# session.commit()
#
# for u, a in session.query(User, Address).\
#                     filter(User.id==Address.user_id).\
#                     filter(Address.email_address=='jack@google.com').\
#                     all():
#     print u, a

SQLAlchemy Core 相当于底层实现,很少使用

import sqlalchemy
print(sqlalchemy.__version__)

from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey

engine = create_engine('sqlite:///foo.db', echo=True)

metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String),
    Column('fullname', String),
)

addresses = Table('addresses', metadata,
  Column('id', Integer, primary_key=True),
  Column('user_id', None, ForeignKey('users.id')),
  Column('email_address', String, nullable=False)
)

metadata.create_all(engine)
conn = engine.connect()

# conn.execute(users.insert(), [dict(name='jack', fullname='Jack Jones'),
#                               dict(name='wendy', fullname='Wendy Williams')])
# conn.execute(addresses.insert(), [
#    {'user_id': 1, 'email_address' : 'jack@yahoo.com'},
#    {'user_id': 1, 'email_address' : 'jack@msn.com'},
#    {'user_id': 2, 'email_address' : 'www@www.org'},
#    {'user_id': 2, 'email_address' : 'wendy@aol.com'},
# ])

from sqlalchemy.sql import select
# s = select([users])
# result = conn.execute(s)
# for row in result:
#     print(row)

# s = select([users, addresses]).where(users.c.id == addresses.c.user_id)
# for row in conn.execute(s):
#     print row

from sqlalchemy.sql import text
s = text(
    "SELECT users.fullname || ', ' || addresses.email_address AS title "
        "FROM users, addresses "
        "WHERE users.id = addresses.user_id "
        "AND users.name BETWEEN :x AND :y "
        "AND (addresses.email_address LIKE :e1 "
            "OR addresses.email_address LIKE :e2)")
print(conn.execute(s, x='m', y='z', e1='%@aol.com', e2='%@msn.com').fetchall())

__repr__是python类的专用方法:你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。

Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与repr()等同的值。很多类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的解读方式。字符串和浮点数,有着独特的解读方式。

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。

在Python 3.0中已经不支持反引号了,所以还是坚持用repr()函数吧

参考文章:Python repr() 或str() 函数, 反引号
           

http://blog.chinaunix.net/uid-21961132-id-3081300.html

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1727006

时间: 2024-11-15 20:24:51

Python的ORM框架SQLAlchemy的相关文章

Python的ORM框架SQLAlchemy入门教程_python

SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又重要于表和行. 一 安装 SQLAlchemy 复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: >>> import sqlalchemy>>> sqlalchemy.__version__'0.9.1'>>> 二 使用 sqlalchemy对数据库操作 1. 定义元信息,绑定到引擎 复制代码 代

Python的ORM框架中SQLAlchemy库的查询操作的教程_python

1. 返回列表和标量(Scalar) 前面我们注意到Query对象可以返回可迭代的值(iterator value),然后我们可以通过for in来查询.不过Query对象的all().one()以及first()方法将返回非迭代值(non-iterator value),比如说all()返回的是一个列表: >>> query = session.query(User).\ >>> filter(User.name.like('%ed')).order_by(User.

研究Python的ORM框架中的SQLAlchemy库的映射关系_python

前面介绍了关于用户账户的User表,但是现实生活中随着问题的复杂化数据库存储的数据不可能这么简单,让我们设想有另外一张表,这张表和User有联系,也能够被映射和查询,那么这张表可以存储关联某一账户的任意数量的电子邮件地址.这种联系在数据库理论中是典型的1-N (一对多)关系,用户表某一用户对应N条电子邮件记录. 之前我们的用户表称为users,现在我们再建立一张被称为addresses的表用于存储电子邮件地址,通过Declarative系统,我们可以直接用映射类Address来定义这张表: >>

Python数据库ORM工具sqlalchemy的学习笔记

SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(sqlite,mysql,postgres, mongodb等),在这里记录基本用法和学习笔记. 一.安装 通过pip安装 $ pip install SQLAlchemy  二.使用 首先是连接到数据库,SQLALchemy支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用的有 mysql://username:password@hostna

Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例_python

最近正好在寻求一种Python的数据库ORM (Object Relational Mapper),SQLAlchemy (项目主页)这个开源项目进入了我的视线,本来想尝试着使用Django的ORM模块的,无奈Django的模块联系比较紧密,没能单独分拆下来,一定程度上说明Django自成体系的生态系统在给我们带来快速便捷的开发环境的同时牺牲了组装的灵活性. 初次学习,也没实质感觉到SQLAlchemy的好处,不过看其介绍的很多大公司均采用该项目,而且其支持的数据库还是蛮丰富的,所以我觉得花点时

Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍_python

1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 代码如下: ed_user = User('ed', 'Ed Jones', 'edspassword')session.add(ed_user) 上面两段代码执行完后对象持久化了么?你或许会兴冲冲的跑去数据库里查看,结果却失望而归--数据库里什么都没有.为什么呢?因为SQLAlchemy采取的是

Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍_python

1. 创建映射类的实例(Instance) 前面介绍了如何将数据库实体表映射到Python类上,下面我们可以创建这个类的一个实例(Instance),我们还是以前一篇文章的User类为例,让我们创建User对象: 复制代码 代码如下: >>> ed_user = User('ed', 'Ed Jones', 'edspassword')>>> ed_user.name'ed'>>> ed_user.password'edspassword'>&g

Python ORM框架SQLAlchemy学习笔记之数据查询实例_python

前期我们做了充足的准备工作,现在该是关键内容之一查询了,当然前面的文章中或多或少的穿插了些有关查询的东西,比如一个查询(Query)对象就是通过Session会话的query()方法获取的,需要注意的是这个方法的参数数目是可变的,也就是说我们可以传入任意多的参数数目,参数的类型可以是任意的类组合或者是类的名称,接下来我们的例子就说明了这一点,我们让Query对象加载了User实例. 复制代码 代码如下: >>> for instance in session.query(User).or

Python的ORM框架SQLObject入门实例_python

SQLObject和SQLAlchemy都是Python语言下的ORM(对象关系映射)解决方案,其中SQLAlchemy被认为是Python下事实上的ORM标准.当然,两者都很优秀. 一.安装 复制代码 代码如下: sudo pip install SQLObject 使用SQLObject操作mysql时候报错ImportError: No module named MySQLdb,那便安装MySQLdb: 复制代码 代码如下: sudo pip install MySQL-python 没想