繁体   English   中英

python和pymssql

[英]python and pymssql

我是python的新手。 我正在尝试查询MSSQL数据库。


import pymssql
conn = pymssql.connect(host='hostname', user='username', password='password', database='dbname')
cursor = conn.cursor()
sql = "select count(*) from T_Email with (nolock) where Transmit is null"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
  print (row)

成功运行的查询是Microsoft SQL Server Management Studio,但我的python脚本始终不返回任何内容。

我确认我有网络连接。 我验证了用户名,密码和数据库名称。 如果我更改密码,那么脚本将出错。

我已经尝试过results = cursor.fetchone(),但这没有帮助。

有什么建议么?

如果您正在使用Ubuntu,您可能已经使用(像我一样)apt-get来安装pymssql包。

这是捆绑版本的已知错误: https//bugs.launchpad.net/ubuntu/+source/pymssql/+bug/918896

尝试使用easy_install手动安装它。

我在Ubuntu 12.04上遇到了同样的问题,实际上修复程序正在执行以下操作:

$ apt-get purge python-pymssql
$ apt-get install freetds-dev
$ pip install Cython
$ pip install pymssql

尝试在查询中添加conn.commit()

import pymssql

conn = pymssql.connect(
server="server",
port=port,
user="user",
password=password,
database="database")
conn

cursor = conn.cursor()
cursor.execute("select count(*) from T_Email with (nolock) where Transmit is null")
     for row in cursor.fetchall():  
     print ("%s\n" % str(row))
conn.close()

更改代码段中的以下行

results = cursor.fetchall()
for row in results:
  print (row)

# results = cursor.fetchall()
for row in cursor:
  print (row)

pymssql在cursor.fetchall()中有bug

供参考https://github.com/pymssql/pymssql/issues/141

如果没有足够的信息来重现这个例子,很难说出你遇到的具体问题。 但是,对于可能出现的问题,我有一些猜测:

  1. 也许你的实际列名(假设你上面的例子只是模拟)太长了。 请参阅: http//code.google.com/p/pymssql/wiki/FAQ (查找列名称会被默默地截断为30个字符。(仅限1.x))这是一个常见的绊倒人,因为它是沉默的失败!
  2. 如果您在查询表之前创建表,或者其他需要提交的事情,即使启用了自动提交( autocommit(1) ),它也会搞砸。 看看我对自己的回答:)在pymssql(python模块)无法使用临时表

祝好运!

麦克风

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM