我发现isql(使用子进程)与python中的Sybase模块相比花费的时间更少。 有人可以建议我,我应该使用子进程还是Sybase。 下面是我用于理解的小测试脚本。
Query = 'select count(*) from my_table'
start_time1 = datetime.now()
db = Sybase.connect(mdbserver,muserid,mpassword,mdatabase)
c = db.cursor()
c.execute(Query)
list1 = c.fetchall()
end_time1 = datetime.now()
print (end_time1-start_time1)
start_time2 = datetime.now()
command = "./isql -S "+mdbserver+" -U "+muserid+" -P "+mpassword+" -D "+mdatabase+" -s '"+Delimiter+"' --retserverror -w 99999 <<EOF\nSET NOCOUNT ON\n "+Query+"\ngo\nEOF"
proc = subprocess.Popen(
command,
stdout=subprocess.PIPE,stderr=subprocess.PIPE,
shell=True,
cwd=sybase_bin
)
output, error = proc.communicate()
end_time2 = datetime.now()
print (end_time2 - start_time2)
答案 0 :(得分:0)
isql
用于对数据库进行交互式访问,并返回格式化为屏幕输出的数据。还有其他填充和格式无法直接控制。当您查看二进制/图像或其他非varchar数据时,它也无法正常工作。
Python模块将按预期提取数据,无需额外格式化。
因此,只要您只提取不太宽的列或具有二进制数据的列,那么您可能可以使用子进程。更好的解决方案是使用python模块。