Как использовать pyodbc, cursor, execute для извлечения данных из SQL, когда нет параметров для query.format? - PullRequest
1 голос
/ 15 мая 2019

Обычно я использую следующий способ извлечения данных из SQL с использованием Python:

myConnect=pyodbc.connect('DSN=B1P HANA;UID=****;PWD=****')
myCursor=myConnect.cursor()

Start1=20150101
End=20200101
query = """
        SELECT "Operator",
               "Position"
        FROM ******
        """
myRow = myCursor.execute(query.format(Start1=Start1,
                                      End=End)
Result = myRow.fetchall()
OperatorTMs = pd.DataFrame(columns=["Operator", "Position"])
for i in Result:
    OperatorTMs=OperatorTMs.append({"Operator":i.Operator,"Position":i.Position},ignore_index=True)

Но теперь мне не нужны никакие параметры в query.format (). И я пробовал способ в https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html. И это не работает

Так может кто-нибудь сказать mw, как это сделать без параметров в query.format?

1 Ответ

1 голос
/ 15 мая 2019

Вы действительно не должны использовать .format для вставки значений столбцов в вашу команду SQL.Ищите «SQL-инъекции» или «Маленькие таблицы Бобби» для получения дополнительной информации.

Вместо этого следует использовать ? заполнители параметров и указывать значения столбцов в качестве дополнительных аргументов для .execute, как в

query = "SELECT col1, col2 FROM tablename WHERE col1 BETWEEN ? AND ?"
myRow = myCursor.execute(query, Start1, End)

Для запросов без значений параметров вы просто передаете строку query отдельно

query = "SELECT col1, col2 FROM tablename"
myRow = myCursor.execute(query)
...