Выберите из SQL Server, где что-то находится в панде данных - PullRequest
0 голосов
/ 22 мая 2019

Я загружаю несколько значений, в данном случае страны, из системы 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)

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