Как использовать ODBC для связи базы данных SQL и выполнения запросов SQL в Python - PullRequest
0 голосов
/ 03 мая 2018

Я обычно использую R для выполнения запросов SQL, используя ODBC для связи с базой данных SQL. Код обычно выглядит так:

library(RODBC)
ch<-odbcConnect('B1P HANA',uid='****',pwd='****')
myOffice <- c(0)
office_clause = ""
if (myOffice != 0) {
  office_clause = paste(
    'AND "_all"."/BIC/ZSALE_OFF" IN (',paste(myOffice, collapse=", "),')'
  )
}
a <- sqlQuery(ch,paste(' SELECT "_all"."CALDAY" AS "ReturnDate                         FROM "SAPB1P"."/BIC/AZ_RT_A212" "_all"
                         WHERE "_all"."CALDAY"=20180101
                               ',office_clause,'
                         GROUP BY "_all"."CALDAY
                       '))  

Рабочий процесс:

  1. odbcConnect должен связать R и SQL с использованием ODBC.

  2. myOffice - это массив для получения данных из R. Эти данные будут использоваться в качестве условий фильтрации в предложении WHERE в SQL.

  3. a хранит результат запроса из базы данных SQL.

Итак, как сделать все это в Python, то есть выполнять SQL-запросы в Python, используя ODBC для связи базы данных SQL и Python? Я новичок в Python. Все, что я знаю, это как:

import pyodbc
conn = pyodbc.connect(r'DSN=B1P HANA;UID=****;PWD=****')

Тогда я не знаю, как продолжить. И я не могу найти общий пример в Интернете. Может ли кто-нибудь помочь, предоставив исчерпывающий пример? Из базы данных SQL ссылки в Python unitl, получающей результат?

1 Ответ

0 голосов
/ 03 мая 2018

Выполнить SQL из Python

Создание экземпляра Cursor и использование метода execute класса Cursor для выполнения любого оператора SQL.

cursor = cnxn.cursor()

Выберите

Вы можете использовать fetchall, fetchone и fetchmany для извлечения строк, возвращаемых из операторов SELECT:

import pyodbc

cursor = cnxn.cursor()
cnxn = pyodbc.connect('DSN=myDSN;UID=***;PWD=***')
cursor.execute("SELECT Col1, Col2 FROM MyTable WHERE Col1= 'SomeValue'")
rows = cursor.fetchall()
for row in rows:
  print(row.Col1, row.Col2 )

Вы можете предоставить параметризованные запросы в последовательности или в списке аргументов:

cursor.execute("SELECT Col1, Col2, Col3, ... FROM MyTable WHERE Col1 = ?", 'SomeValue',1)

Вставить

В командах INSERT также используется метод execute; однако впоследствии вы должны вызвать метод commit после вставки, иначе вы потеряете свои изменения:

cursor.execute("INSERT INTO MyTable (Col1) VALUES ('SomeValue')")
cnxn.commit()

Обновление и удаление

Как и при вставке, вы также должны позвонить commit после вызова execute для обновления или удаления:

cursor.execute("UPDATE MyTable SET Col1= 'SomeValue'")
cnxn.commit()

Метаданные Discovery

Вы можете использовать метод getinfo для получения таких данных, как информация об источнике данных и возможностях драйвера. Метод getinfo проходит через ввод в метод ODBC SQLGetInfo.

cnxn.getinfo(pyodbc.SQL_DATA_SOURCE_NAME)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...