使用pypyodbc无法在python中使用where子句运行mssql select query

时间:2017-03-30 13:52:53

标签: python sql-server pypyodbc

我正在使用库pypyodbc,并尝试使用select子句在mssql中运行where查询。

但是我得到的错误表明语法错误。

Error here ('42000', "[42000] [FreeTDS][SQL Server]Incorrect syntax near the keyword 'User'.")

我的函数中的查询如下;

try:

    selectUserDetails = "SELECT Username,Password FROM User WHERE Username = ?"
   cursor.execute(selectUserDetails,(username,))

    for row in cursor:
        print(row);

except Exception as e:

    print('Error here ' + str(e))

我获取光标的功能如下:

def msDbCred():


try:
    from msDb import connection_string

    conn = pypyodbc.connect(connection_string)
    cursor = conn.cursor();
    return cursor;

except pymysql.err.OperationalError:
    sys.exit("Invalid Input: Wrong username/db or password found, please try again")

cursor = msDbCred()

并且我的数据库凭据存储在名为msDb.py

的其他文件中
db_host = '127.0.0.1'
db_name = 'TD_1.0'
db_user = 'ReadOnly'
db_password = 'mypaswword'

connection_string = 'Driver=SQL Server;Server=' + db_host + ';Database=' + db_name + ';uid=' + db_user + ';PWD=' + db_password + ';'

我的问题是,查询本身是否有问题。因为我在我的代码中的其他地方使用相同的格式,它的工作原理。或者我的功能还有其他问题吗?

更新:

@Gord Thompson说我应该改变我的疑问。

我已经改变了,我的查询是;

selectUserDetails = "SELECT Username FROM [TD_1.0].[dbo].[User] WHERE Username = ?"
cursor.execute(selectUserDetails,(username,))

但现在我收到了错误;

('HY010', '[HY010] [unixODBC][Driver Manager]Function sequence error')

1 个答案:

答案 0 :(得分:1)

我设法找出错误的位置以及如何修复错误。

在我的msDbCred()函数中,我直接返回了光标。我在另一个文件中测试并发现这是问题所在。

因此,我创建了一个空数组并将光标附加到数组,然后返回数组。

然后使用数组的第一个索引作为代码

中其他位置的光标
def msDbCred():

    cred = []
    try:
        from msDb import connection_string
        conn = pypyodbc.connect(connection_string)
        cursor = conn.cursor();
        cred.append(cursor)
        return cred
    except pymysql.err.OperationalError:
        sys.exit("Invalid Input: Wrong username/db or password found, please try again")

cursor = msDbCred()

然后使用游标数组的第一个索引

try:
    selectUserDetails = "SELECT Username,Password,UserId FROM [User] WHERE Username = '"+str(username)+"' AND IsEditor = '"+str(True)+"'"
           cursor[0].execute(selectUserDetails)

    for row in cursor[0]:
        return  row[0] == username and row[1] == password
except Exception as e:
     print('Error is ' + str(e))

现在正在运作。