Я загружаю несколько значений, в данном случае страны, из системы AS400 в кадр данных pandas.Кадр данных со странами выглядит следующим образом:
USA
GB
NL
DE
После этого я пытаюсь получить все связанные данные с другого сервера (SQL Server), где один столбец эквивалентен списку, который я получаю от AS400.
Код Python для выбора данных на SQL Server:
python
Country = ''
for index,row in df.iterrows():
Country = Country + "'" + row['Country'] + "', "
Country = Country [:-2]
# generic function to open a connection to a database by connection string
def open_con(con_str):
return po.connect(con_str)
# connect to database
def con( server = 'ms_sql_server', database = 'countries' ):
try:
return open_con('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';Trusted_Connection=yes;')
except:
print("Failed to open connection to server!")
exit()
#get first 100 rows
def get_entries():
connection = con(database='ms_sql_server') # open connection to database (by ODBC driver)
dataFrame = pd.read_sql("""
SELECT TOP 100 *
FROM ms_sql_server.dbo.countries
WHERE Country in (""" + Country + """)
""", connection)
connection.close()
return dataFrame
print(get_entries())
Однако описанный выше подход не работает должным образом.Я могу легко загрузить данные из AS400 в информационный блок.Кроме того, соединение с SQL Server работает нормально. Я могу получить данные, если вручную ввести страны в раздел where SQL-запроса. Но если я объединю их с помощью строкового метода, описанного выше, я получу пустой вывод DataFrame в консоли .
Я думаю, что есть гораздо лучший способ сделать это.Должна быть какая-то встроенная функция для этого?Я не смог найти подходящего решения после нескольких часов поиска.
На самом деле моя первая попытка была связана с длинным запросом SQL, который создал временную таблицу на сервере, которая снова работает нормально, если я вручную создаю список стран.заранее, а не получать их из другой таблицы (в данном случае AS400)