我正在使用库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')
答案 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))
现在正在运作。