[zz]sqlalchemy使用

个人总结:

      这个是非常简单易懂的不使用declarative_base的例子,保存一下

-----------------------------------------------------------我是无情的分割线--------------------------------------------------------------

应用程序离不开对数据的操作,因为正在计划做一个桌面小程序练手Python,所以开始了Python的数据库操作的学习。

    提到数据库,就不得不提ORM,所谓万物皆对象,正是有了非常方便的ORM工具,才使得编程脱离了繁琐而冗余的“select”操作,把我们的注意力转移到了程序的逻辑上面来。从搜索的口碑看来,SQLAlchemy作为Python下的一款ORM工具的评价是相当不错的。看着SQLAlchemy,让我想起了Hibernate,他们非常像。

    接触了Python,才让我认识了SQLite,才让我抛弃了Access。作为轻量级数据库的应用足足有余。推荐一款GUI下的SQLite管理工具  。

    工具都齐了就开工。

    实现一个简单的对“用户”信息的CRUD操作。首先定义一个”用户“类,文件名为us.py

    class user(object):
def __init__(self,name,age,password):
self.name=name
self.age=age
self.password=password

    非常简单的一个user类,它必须继承object这个数据类型。有关这个东西的具体机制好像牵扯到”元类“这个概念,我没有深入去研究,总之要想实现ORM,必须要这样写…(先实现了再说)

    来写一个test.py,内容如下(因为程序中有中文,虽然是注释,但也要在第一行加上#coding=gbk,当然#coding=utf也行,但这样一来,中文会被转变成unicode(eclipse下),看也看不懂了澹

#coding=gbk
 
from sqlalchemy import *
from sqlalchemy.orm import *
 
from us import *
 
#建立数据库引擎,这里使用的是相对路径,数据库的位置在当前文件的目录下。
 
db=create_engine('sqlite:///ew.db')
 
#设置metadata并将其绑定到数据库引擎
 
metadata = MetaData(db)
 
#创建metadata,这里的checkfirst参数是检测是否已经建立,能有效的防止错误。
 
metadata.create_all(checkfirst=True)
 
#这里使用到了Table函数,这个就是定义数据库里面新建的表啦。表名叫users
 
users = Table('users', metadata,
Column('user_id', Integer, primary_key=True),
Column('name', String(40)),
Column('age', Integer),
Column('password', String),
)
 
#定义好了,那就执行吧,这样数据库中的users表就被创建了。
 
users.create(checkfirst=True)
 
#把user类和数据库中的users表匹配起来,这样user类的各个属性就和users表神奇的搭配起来了
#这里要注意的是user类的属性和users表的列名要一致哦(好像支持别名的,不过没研究)
 
mapper(user,users)
 
#可以这么说,至此ORM的配置已经完成了
#下面我们就可以直接对user类进行操作,而不必关心后台数据库的具体实现了,全部交给SQLAlchemy处理
#这里对于数据的传递要用到session这个东东
#可以把它比喻成一个端盘子的,你只要把东西丢给它,吩咐好干什么就行了。
#首先创建Session,并将其绑定到数据库引擎,嘿嘿,这个是专门服务与db数据库的Waiter哦。
 
Session=sessionmaker(bind=db)
session=Session()
 
#session准备就绪,来给他吩咐任务吧。定义一个新用户newuser。
 
newuser=user('Joke',12,'ddd')
 
#把newuser丢给session
 
session.add(ed_user)
 
#执行
 
session.commit()
 
#看看数据库有没有添加成功?就这么简单
 
#来看看查找,修改和删除
#session.query()括号里面的参数意思是指明查找的对象
#因为user已经和users表匹配,实际上也就是select * from users
#后面的filter_by参数的含义也就是where users.age=12
#明白了ORM带来的好处了吧,真正把对数据的操作变成了一种“享受”
#first()参数的含义是返回结果集中的第一条数据。
 
u=session.query(user).filter_by(age=12).first()
 
#来对查询出来的数据修改一下
 
u.age=44
 
#丢给session执行。这里的对象u已经持久化了,直接提交session,自动更新数据。
 
session.commit()
 
#看看数据库的数据是不是修改了?
#再来看删除
 
u=session.query(user).filter_by(age=44).first()
session.delete(u)
session.commit()
posted @ 2012-04-10 14:08  zaleilynn  阅读(472)  评论(0编辑  收藏  举报