Я использую Python для извлечения данных из SQL с помощью ODBC для связи Python с базой данных SQL. когда я делаю запрос, мне нужно использовать переменные в запросе, чтобы сделать мой результат запроса изменяемым. Например, мой код:
import pyodbc
myConnect = pyodbc.connect('DSN=B1P HANA;UID=***;PWD=***')
myCursor = myConnect.cursor()
Start = 20180501
End = 20180501
myOffice = pd.Series([1,2,3])
myRow = myCursor.execute("""
SELECT "CALDAY" AS "Date",
"/BIC/ZSALE_OFF" AS "Office"
FROM "SAPB1P"."/BIC/AZ_RT_A212"
WHERE "CALDAY" BETWEEN 20180501 AND 20180501
GROUP BY "CALDAY","/BIC/ZSALE_OFF"
""")
Result = myRow.fetchall()
d = pd.DataFrame(columns=['Date','Office'])
for i in Result:
d= d.append({'Date': i.Date,
'Office': i.Office},
ignore_index=True)
Вы видите, что я извлекаю данные из базы данных SQL и сохраняю их в виде списка (Результат), а затем преобразовываю этот список во фрейм данных (d).
Но мои проблемы:
- Мне нужно указать дату начала и конец данных в части myCursor.execute, что-то вроде
"CALDAY" BETWEEN Start AND End
- Допустим, у меня 100 данных в моих данных. Теперь мне просто нужно 3 из них (myOffice). Итак, мне нужно поместить условие в часть myCursor.execute, например
myOffice in (1,2,3)
В R я знаю, как справиться с этими двумя проблемами. код такой:
office_clause = ""
if (myOffice != 0) {
office_clause = paste(
'AND "/BIC/ZSALE_OFF" IN (',paste(myOffice, collapse=", "),')'
)
}
a <- sqlQuery(ch,paste(' SELECT ***
FROM ***
WHERE "CALDAY" BETWEEN',Start,'AND',End,'
',office_clause1,'
GROUP BY ***
'))
Но я не знаю, как это сделать в Python.
Может ли кто-нибудь помочь мне здесь?