您的位置:首页 > 编程语言 > Python开发

关于用python的SQLAlchemy访问数据库的学习记录,及SQLAlchemy的安装简介

2006-03-07 16:58 946 查看
我最近从网上得知python的ORM套件SQLAlchemy访问数据库十分方便,特别是它能够访问我所钟爱的oracle和MySql数据库,我从网上查找到一些例子程序,再加SQLAlchemy自带的说明文档。逐渐摸索出了SQLAlchemy运行的简单规律,在此感谢limodou先生的大力指点。

SQLAlchemy是一个十分优秀的ORM,它在执行一个查询时有多个层次:

1. engine
2. table meta
3. mapper

第一种方式最简单,利用引擎直接输入SQL语句,与其它SQL查询控件一样.但常用的是后两种,第二种相当于简单化的sql操作.第三种为ORM的使用方式.

以下为我的源码,我使用的是oracle和Mysql的双重连接,要求必须安装MySqldb和cx_Oracle。

from sqlalchemy import *
import sqlalchemy.util as util
import string, sys
mysql_engine = create_engine('mysql',
{'db':'test','user':'root','passwd':'caoyan','host':'127.0.0.1'}, echo=True) #创建Mysql连接
oracle_engine = create_engine('oracle',{'dsn':'netbill_192.168.10.100','user':'system','password':'winjoin'},echo=True) #创建oracle连接
conn = mysql_engine.connection() #得到连接对象

rsscategory = Table('rss_category',mysql_engine,Column('id',Integer,primary_key = True),Column('name',String,nullable = True),Column('tbuseraccountsinfolisttemptest',String,nullable=True),Column('sum',Number,nullable=True))

rssoracle = Table('TbOperator',oracle_engine,Column('OperatorName',String))

#rsscategory.create()
#tmpid = rsscategory.c.keys()
#print tmpid

s = select([func.count(rsscategory.c.id)]).execute()
s = rsscategory.select()

usernametemptest='createcao'

tmp = rsscategory.select(rsscategory.c.tbuseraccountsinfolisttemptest==usernametemptest).execute().fetchall() #取出名为'createcao'的所有记录

'''

注意,上句在mysql下执行可能正常,但在oracle下执行将会出错,原因是tbuseraccountsinfolisttemptest_usernametemptest标识符名长度超过32个字符,可通过绑定名字的方法解决,可将上句换为:

'''

tmp = rsscategory.select(rsscategory.c.tbuseraccountsinfolisttemptest==bindparam('username')).execute(username = usernametemptest).fetchall()

rsscategory.update(rsscategory.c.id==1,values(rsscategory.c.sum:rsscategory.c.sum + 5)).execute() #用字段进行计算操作
a = rsscategory.delete(rsscategory.c.id==4).execute() #删除id=4的记录
c = s.execute()
print c.rowcount
print rsscategory.c.id
#mysql_engine.execute("insert into rss_category values(1,'cao')") *
#rsscategory.insert().execute(id=5,name='cao') #插入记录
conn.commit()
objectstore.commit(a) #提交己被删除的记录
#result = mysql_engine.execute("select * from rss_category")
#rsscategory.execute("select * from rsscategory",echo=True)
#result = select([resscategory],echo=True)
result = rsscategory.select(rsscategory.c.name == 'cao').execute()
result.fetchall()
r = result.fetchone()
print result.rowcount
print result.fetchone

tmpstr = r
print rsscategory.c.keys
print tmpstr
class User(object):
pass
usermapper = mapper(User,rsscategory)

user = usermapper.select_by(id=1)[0]

myuser = User()
myuser.name = "jfkdosjaof"
myuser.id = 7
#myuser.name = 'yan'

User.mapper = mapper(User,rsscategory)

u = User(8,"yan")
u.name = 'aaa' #插入一打记录

objectstore.commit(u) #commit('需要提交的对象')
temp = u.mapper.select_text("select * from rss_category") #用SQL语句查找数据集,
for tmp1 in temp:
print tmp1.id
print tmp1.name

temp = u.mapper.select_text("update rss_category set name='yan' where name='cao3'")
objectstore.commit(u)
print temp
temp1 = u.mapper.select_by(name='aaa',id=15) #执行一个SQL 相当于And连接
for tmp2 in temp1:
print tmp2.id
print tmp2.name

user2 = u.mapper.get_by(name='aaa') #返回一条附合条件的记录,如果查到多条,则返回第一个记录
print user2.id
print user2.name

temp3 = u.mapper.select_by_name('aaa') #得到多条记录 好象只能是字符型
for tmp2 in temp3:
print tmp2.id
print tmp2.name

b = u.mapper.delete_obj(u.c.id==3)
objectstore.commit(b)

temp4 = u.mapper.get(5) #得到第几条记录
print temp4.id
print temp4.name

myobj = u.mapper.get(5,2,'cao')
print myobj.id
print myobj.name

re_sel = u.mapper.select(or_(myobj.c.id==1,myobj.c.name=='aaa')) #用or条件查询数据库
for tmp5 in re_sel:
print tmp5.id
print tmp5.name

re_se1 = u.mapper.select(user2.mapper.select(user2.c.name=='aaa'))
for tmp6 in re_se1:
print tmp6.id
print tmp6.name

#print temp.id
print temp.name
print user.count
while(not user):
print user[0]
print "%s" % r

由于小弟初次接触SQLAlchemy,难免有谬误之处,如有不妥之处,还请各位指正。

SQLAlchemy的安装也十分方便,需要得到egg文件,可以将原先安装成功的文件考贝保存下来,以后都可以使用。就不需要再从网上下载了(由于版本升级的问题,旧版本的安装包不一定能从网上下来)。具体要保留下来的有:

$installPythonDir$/Lib/site-packages/sqlalchemy-0.1.2-py2.4.egg (文件夹,此为SQLAlchemy的安装目录)

$installPythonDir$/Lib/site-packages/easy-install.pth (路径文件,内容指向了SQLAlchemy)

<内容举例>

sqlalchemy-0.1.2-py2.4.egg #此指向了SQLAlchemy的安装目录

得到以上一个文件和文件夹后就可以通过复制到python安装目录下的Lib/site-packages/下即可完成SQLAlchemy的安装。简单吧,我在windows和Linux下都试过了,完全可行。但要注意,SQLAlchemy只是一个上层调用组件,具体要访问数据库还需要安装其它访问驱动,例如,要访问Mysql,还需要安装MySQLdb,当然,用了SQLAlchemy的确方便快捷多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: