Search code examples
pythonmysqlsqlpyodbc

Does pyodbc support any form of named parameters?


I know sqlite3 has

data = {'test_col': 012345679}
sqlite3_conn.execute("""
    UPDATE test_db SET test_col = :test_col
    ;""", data)

and mysql-connector-python has

data = {'test_col': 012345679}
mysql_conn.execute("""
    UPDATE test_db SET test_col = %(test_col)s
    ;""", data)

but does pyodbc support any form of named parameters? I like being able to just pass a dict to the execute method. It is very convenient, and with some of my queries, such as INSERT INTO ... ON DUPLICATE KEY UPDATE, it is needed.


Solution

  • It doesn't support named parameters, but bound parameters passed in the correct order are fairly straightforward:

    x = "This"
    y = 345
    
    mssql_cur.execute("SELECT * FROM mytable WHERE colx = ? AND coly = ?", x, y)
    

    or

    mssql_cur.execute("SELECT * FROM mytable WHERE colx = ? AND coly = ?", (x, y))
    

    More details and options here, such as passing executemany parameters:

    https://github.com/mkleehammer/pyodbc/wiki/Cursor

    Good luck!