Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python的trackback错误-使用pymssql_Python_Pymssql - Fatal编程技术网

python的trackback错误-使用pymssql

python的trackback错误-使用pymssql,python,pymssql,Python,Pymssql,我正在尝试使用python 2.5.2执行以下代码。脚本正在建立连接并创建表,但是由于以下错误而失败 剧本 import pymssql conn = pymssql.connect(host='10.103.8.75', user='mo', password='the_password', database='SR_WF_MODEL') cur = conn.cursor() cur.execute('CREATE TABLE persons(id INT, name VARCHAR(100

我正在尝试使用python 2.5.2执行以下代码。脚本正在建立连接并创建表,但是由于以下错误而失败

剧本

import pymssql
conn = pymssql.connect(host='10.103.8.75', user='mo', password='the_password', database='SR_WF_MODEL')
cur = conn.cursor()
cur.execute('CREATE TABLE persons(id INT, name VARCHAR(100))')
cur.executemany("INSERT INTO persons VALUES(%d, %s)", \
    [ (1, 'John Doe'), (2, 'Jane Doe') ])
conn.commit()

cur.execute("SELECT * FROM persons WHERE salesrep='%s'", 'John Doe')
row = cur.fetchone()
while row:
    print "ID=%d, Name=%s" % (row[0], row[1])
    row = cur.fetchone()

cur.execute("SELECT * FROM persons WHERE salesrep LIKE 'J%'")

conn.close()
错误

Traceback (most recent call last):
  File "connect_to_mssql.py", line 9, in <module>
    cur.execute("SELECT * FROM persons WHERE salesrep='%s'", 'John Doe')
  File "/var/lib/python-support/python2.5/pymssql.py", line 126, in execute
    self.executemany(operation, (params,))
  File "/var/lib/python-support/python2.5/pymssql.py", line 152, in executemany
    raise DatabaseError, "internal error: %s" % self.__source.errmsg()
pymssql.DatabaseError: internal error: None

有什么建议吗?另外,您如何读取回溯错误,任何人都可以帮助我理解错误消息?你是怎么读的?自下而上

我认为您假设的是常规python字符串插值行为,即:

>>> a = "we should never do '%s' when working with dbs"
>>> a % 'this'
"we should never do 'this' when working with dbs"
execute方法中的%运算符看起来像普通的字符串格式运算符,但更方便或更便于记忆;您的代码应为:

cur.executeSELECT*从salesrep=%s“John Doe”的人员中选择

如果没有引号,这将适用于像O'Reilly这样的名称,并有助于防止每个数据库适配器设计的SQL注入。这就是数据库适配器的真正用途——将python对象转换为sql;它将知道如何引用字符串和正确转义标点符号等。如果您这样做,它将起作用:

>>> THING_ONE_SHOULD_NEVER_DO = "select * from table where cond = '%s'"
>>> query = THING_ONE_SHOULD_NEVER_DO % 'john doe'
>>> query
"select * from table where cond = 'john doe'"
>>> cur.execute(query)

但这是一种糟糕的做法。

追溯是一个糟糕的笑话。如果没有错误,那么它为什么要抱怨呢?是的,从下到上读取回溯。每一行都是调用其下一行的行。没有salesrep列,只有名称