Вставка значений из файла Excel в предложение WHERE ... IN оператора SELECT - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь выполнить запрос SQL, который извлекает уникальные идентификаторы из столбца файла Excel для использования в качестве ввода операторов в Python (PYODBC).

Я пытаюсь переписать часть кода SAS моей компании, так как мы переходим на Python позже в этом году.Программа берет файл .xls и использует данные в каждом столбце в качестве входных данных в предложении «WHERE _ IN ()».В идеале это будет повторять каждый столбец, каждый раз принимая значения столбца, используя их в качестве ограничений запроса, а затем записывая файл .txt с выводом из прогона SQL.Надеюсь, я объясняю, что ясно

Это прекрасно работает, если я вручную копирую / вставляю все значения столбцов непосредственно в оператор cur. (), Но для практических целей могу прочитать их из файла Excelэто ключ.Какие-нибудь мысли?Я попробовал буквально все, но так много нужно узнать, что я уверен, что даже не поцарапал поверхность.Моя логика здесь кажется правильной, но поскольку единственная ошибка, которую я получаю, это «Синтаксическая ошибка или нарушение доступа», трудно определить, какие части я испортил.

Большое спасибо за любыевход или помощь!

import pandas as pd
import numpy as np
import pyodbc
con = pyodbc.connect('DSN=**;UID=**;PWD=**')
cur=con.cursor()
df = pd.read_excel('file.xls', sep='\s+')

#Create array of Column Names
name = np.array(df.columns.values)

###Create Arrays of ID Values###
placements = []
for i in name:
   info = df[i]
   placements.append(info)

####Combine Names and Values for iteration###
placements_out = np.column_stack((name,placements))

###Try to make a cool SQL code###
sql=”””select distinct VALUES_I_NEED 
       from ODBC_TABLE 
       where FIRST_RESTRAINT=Value
       and placement_ids in (select * from placements_out)""")

### Execute said SQL Code.  Do this over every column, writing the output from each into its own .txt file:###
 for i in name:
    cur.execute(sql)
    cur.fetchall()
    f.write(“%s\n” % i)
    f.close()

Ожидаемые результаты = Все прошло отлично, посмотрите на все эти файлы .txt!

Фактические результаты = "Ошибка синтаксиса" ... не так уж много, чтобы уйтидействительно

... ле вздох ...

...