我正在使用库 pypyodbc
并尝试使用 where
子句在 mssql 中运行 select
查询。
但是我收到的错误表明语法错误。
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')
最佳答案
我设法弄清楚错误在哪里以及如何修复它。
在我的 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))
现在可以正常工作了。
关于python - 无法使用pypyodbc在python中使用where子句运行mssql select查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43119933/