python - 无法使用pypyodbc在python中使用where子句运行mssql select查询

标签 python sql-server pypyodbc

我正在使用库 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/

相关文章:

Javascript 导致选择输入卡住

python - 在 TensorFlow 中使用 tf.placeholder 时出现异常

sql - 可以有一个带有可变列的表吗?

python - 将内容传递给 Python 中另一个模块的函数

sql-server - 关于数据库的问题

python - 使用pypyodbc、pymssql和pyodbc的优缺点是什么?

python - 64位Python可以连接32位MS访问驱动程序吗?

python - 来自 SQL Server 的 "Invalid precision or scale value"错误,使用 pypyodbc for Decimal( '0.00' )、Decimal( '0.12' )

python - 读取txt文件中的特定字段并将它们存储在numpy数组中

python - 从需要标准输入的子进程实时打印标准输出