Adodbapi调用sqlserver储存过程的问题及pymssql的使用2009-12-22
2009-12-22 09:09
330 查看
Python有好也有坏,库非富,但要真一个能适合自己用的还是得自己费些功夫,去验证,因为有些库可能已经年代久远了,或是跟不上时代了,
在我想利用py来调用储存过程时,google,baidu到两篇有比较有质量的文章
Adodbapi执行Ms Sqlserver存储过程的问题 - 徐明的博客
Python使用SQL SERVER存储过程 - python - Python - JavaEye论坛
我花了一个下午的时间,来测试adodbapi这个库到底能不能用来调用储存过程,在调用cur.fetchall()还是会报错
因此我还是转而使用pymssql库了,
这里对我没有去仔细看adodbapi库的代码的问题进行fix感到小小的羞愧,希望用此文告知后来人,少走弯路,我内心也会好过一些。
下面是我用pymssql写的调用储存过程的代码
参考文章
pymssql - simple MS SQL Python extension module
Python学习笔记十(pymssql数据库操作) - 我的鱼塘 - JavaEye技术网站
PS:本文的高亮使用了Highlight : code & syntax highlighting : by André Simon
另外再介绍两个高亮的网站:
codepaste
代码发芽网 - 代码高亮 无需插件 近百种语言 30多种高亮主题
Windows live writer也是一个不错的写blog的工具,他也有一个代码高亮的插件Windows Live Gallery
另外我想说的是,百度的爬虫策略还是很牛的,这篇文章提交上去不到一分钟,在我搜索的时候显示出来了,而且位置在头条。虽然寡人不吊steven lee,但是还是小小表扬一下它吧。
关于pymssql的操作的更好的封装
我自己有一个小的设想是,我自己常用的一些小的py函数,做自己做一个模块,这样每次使用的是时候,就不用每次都去google或是百度了,下面几个是我在此次写脚本中遇到 的一些东东有用的文章
[Script]采用Python创建当前日期文件夹 - 今我来思 - 博客园
[Python]文件的创建与追加 - Python - 睡前要抱抱
用Python直接写UTF-8文本文件 - DBLobster的日志 - 网易博客
在我想利用py来调用储存过程时,google,baidu到两篇有比较有质量的文章
Adodbapi执行Ms Sqlserver存储过程的问题 - 徐明的博客
Python使用SQL SERVER存储过程 - python - Python - JavaEye论坛
我花了一个下午的时间,来测试adodbapi这个库到底能不能用来调用储存过程,在调用cur.fetchall()还是会报错
因此我还是转而使用pymssql库了,
这里对我没有去仔细看adodbapi库的代码的问题进行fix感到小小的羞愧,希望用此文告知后来人,少走弯路,我内心也会好过一些。
下面是我用pymssql写的调用储存过程的代码
#!/usr/bin/env python
# -*- coding:utf8 -*-
#对pymssql库的储存过程调用进行测试
import pymssql
server = '192.168.1.11'
user = 'test'
password = 'test'
database = 'db'
sp = 'DM_R_GetUserProductIDsFromMinUserIDtoMaxUserIDWithConstrains'
sql="DECLARE @return_value int;EXEC @return_value = [dbo].[DM_R_GetUserProductIDsFromMinUserIDtoMaxUserIDWithConstrains] %s,%s,%s,%s,%s;SELECT 'Return Value' = @return_value" % (0,5000,1,9,2)
print sql
def ffchk(server, user, password, database, sql):
try:
db = pymssql.connect(host = server,
database = database,
user = user,
password = password,
login_timeout = 10)
cur = db.cursor()
cur.execute(sql)
row = cur.fetchone()
print type(row)
while row:
print "ProductIDs=%s" % (row[0])
row = cur.fetchone()
except Exception, e:
print e
finally:
try: db.close()
except: pass
ffchk(server,user,password,database,sql)
参考文章
pymssql - simple MS SQL Python extension module
Python学习笔记十(pymssql数据库操作) - 我的鱼塘 - JavaEye技术网站
PS:本文的高亮使用了Highlight : code & syntax highlighting : by André Simon
另外再介绍两个高亮的网站:
codepaste
代码发芽网 - 代码高亮 无需插件 近百种语言 30多种高亮主题
Windows live writer也是一个不错的写blog的工具,他也有一个代码高亮的插件Windows Live Gallery
另外我想说的是,百度的爬虫策略还是很牛的,这篇文章提交上去不到一分钟,在我搜索的时候显示出来了,而且位置在头条。虽然寡人不吊steven lee,但是还是小小表扬一下它吧。
关于pymssql的操作的更好的封装
#!/usr/bin/env python
# -*- coding:utf8 -*-
#http://lexus.cnblogs.com
#frederick.mao@gmail.com
#这个脚本的作用是,调用SQLServer的储存过程,导出MinUserId到MaxUserId的间的数据储存到一个文本文件中,以MinUserId-MaxUserId.txt做为储存文件名
#write @2009/12/22
import sys,pymssql,ericklib
def f(cur):
return cur.fetchall()
# row=cur.fetchone()
# while row:
# print "ProductIDs=%s" % (row[0])
#row = cur.fetchone()
def connectdb_invoke_callback_and_return_recordset(server, user, password, database, sql,callback):
try:
db = pymssql.connect(host = server,
database = database,
user = user,
password = password,
login_timeout = 10)
cur = db.cursor()
cur.execute(sql)
return callback(cur)
except Exception, e:
print e
finally:
try: db.close()
except: pass
def export_user_brought_productIDs_between_minuserid_and_maxuserid(min,max):
'''
导出用户id在min和max之间的每个用户购买过的品类
'''
server = '192.168.1.1'
user = 'test'
password = 'test'
database = 'db'
sp = 'DM_R_GetUserProductIDsFromMinUserIDtoMaxUserIDWithConstrains'
sql="DECLARE @return_value int;EXEC @return_value = %s %s,%s,%s,%s,%s;SELECT 'Return Value' = @return_value" % (sp,min,max,1,9,2)
print sql
result=connectdb_invoke_callback_and_return_recordset(server, user, password, database, sql,f)
prefix_path=ericklib.getcwd()+'\\data\\'
ericklib.createfolders(prefix_path)
if(result is None):
print (u'用户%s-%s结果为none' % (min,max)).encode('gbk',"ignore")
#创建ascii编码格式的空白文件
ff=open(prefix_path+'%s-%s,0.txt'%(min,max),'w')
ff.close()
else:
ff=open(prefix_path+'%s-%s,%s.txt'%(min,max,len(result)),'w')
for e in result:
print e
ff.write(e[0]+'\n')
ff.close()
def main(argv=None):
if argv is None:
argv = sys.argv
minuserid,maxuserid=argv[1],argv[2]
print minuserid,maxuserid
list=range(int(minuserid),int(maxuserid),2000)
list.append(maxuserid)
# for i in xrange(0,len(list)):
# print list[i]
def fff(x,y):
export_user_brought_productIDs_between_minuserid_and_maxuserid(x,y)
print x,y
return y
reduce(fff,list)
# export_user_brought_productIDs_between_minuserid_and_maxuserid(minuserid,maxuserid)
if __name__=='__main__':
#从外部接收两个参数一个分别代表MinUserId和MaxUserId
sys.exit(main())
我自己有一个小的设想是,我自己常用的一些小的py函数,做自己做一个模块,这样每次使用的是时候,就不用每次都去google或是百度了,下面几个是我在此次写脚本中遇到 的一些东东有用的文章
[Script]采用Python创建当前日期文件夹 - 今我来思 - 博客园
[Python]文件的创建与追加 - Python - 睡前要抱抱
用Python直接写UTF-8文本文件 - DBLobster的日志 - 网易博客
相关文章推荐
- sqlserver在调用存储过程中遇到convert转换失败问题的解决方法
- 带输出参数的存储过程的使用及在C#中调用问题
- 如何解决mid使用过程中出现的以下问题(无效的过程调用或参数: 'mid')
- SqlServer全文检索使用过程问题点滴
- osx中使用navicat连接sqlserver查看functions中的存储过程的内容时无法显示的问题
- 如何解决mid使用过程中出现的以下问题(无效的过程调用或参数: 'mid')
- 在CentOS上使用Neatbeans开发C++,调用Python的过程、遇到的问题和解决办法
- 带输出参数的存储过程的使用及在C#中调用问题
- 项目实现过程中遇到的问题记录(二)------------在Thread中使用CallBack并没有调用CallBack的返回
- 解决ubuntu下python使用pymssql能连接sqlserver但返回值为空的问题
- 关于JDBC使用命名参数(named parameters)进行存储过程调用的问题
- lamp使用php处理上传文件,调用move_uploaded_file函数遇到目录写权限问题及解决过程
- 带输出参数的存储过程的使用及在C#中调用问题
- 关于ODBC api 执行sqlserver存储过程的问题
- C#中的类SqlCommand对象使用方法ExecuteNonQuery()调用SQLServer存储过程时,存储过程执行成功,数据发生改变,但是返回-1
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- 使用OPENDATASOURCE调用存储过程的问题
- 仿APiDemo使用ProgressDialog 并解决调用dismiss方法后没有对话框不消失的问题
- vue使用axios调用豆瓣API跨域问题
- 使用SqlSrv调用sqlserver的存储过程