应用程序离不开对数据的操作,因为正在计划做一个桌面小程序练手Python,所以开始了Python的数据库操作的学习。
提到数据库,就不得不提ORM,所谓万物皆对象,正是有了非常方便的ORM工具,才使得编程脱离了繁琐而冗余的“select”操作,把我们的注意力转移到了程序的逻辑上面来。从搜索的口碑看来,SQLAlchemy作为Python下的一款ORM工具的评价是相当不错的。看着SQLAlchemy,让我想起了Hibernate,他们非常像。
接触了Python,才让我认识了SQLite,才让我抛弃了Access。作为轻量级数据库的应用足足有余。推荐一款GUI下的SQLite管理工具SQLite Administrator 。
工具都齐了就开工。
实现一个简单的对“用户”信息的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() #OK,一切就是这么简单
发表回复