0

我发现 isql(使用子进程)与 python 中的 Sybase 模块相比花费的时间更少。有人可以建议我,我应该使用 subprocess 还是 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)
4

1 回答 1

0

isql用于对数据库的交互式访问,它返回格式化为屏幕输出的数据。还有其他无法直接控制的填充和格式。当您查看二进制/图像或其他非 varchar 数据时,它也无法正常工作。

Python 模块将按预期提取数据,无需额外格式化。

因此,只要您只提取不太宽的列,或者具有二进制数据,那么您就可以使用子进程。更好的解决方案是使用 python 模块。

于 2016-02-10T14:17:54.253 回答