Как лучше построить оператор SQL со значениями из фрейма данных?

0

рассмотрите следующий оператор SQL:

q="SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN (700,701,702...)" 

значения в скобках должны исходить из кадра данных:

df=pd.DataFrame({"H_ID":[701,702,703,704,705,706,707,708,709,710],"B":[0,0,0,0,0,0,1,1,2,2], "C":[4,3,3,3,2,2,2,1,1,2]})

на данный момент, что я делаю?

#convert H_ID column to a string separated by comma
my_ids = str(list(df["H_ID"].apply(lambda x : str(x)))).replace("[","").replace("]","")

и я добавляю его в свой запрос:

q="SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN ("+my_ids+")" 

Вопрос: есть ли лучший способ сделать это, избегая преобразования в строку?

  • 2
    Вставьте значения в (временную) таблицу, затем объедините ее. Но тогда вам нужно упорядочить все, чтобы вставить в таблицу. Это не красиво, однако вы идете. Если вы не достигнете предела, когда он перестает работать, я буду придерживаться вашего текущего процесса. (Все сводится к тому, «как я могу получить длинный список значений от моего клиента на сервер MySQL?» Ответ никогда не бывает красивым.)
  • 0
    @ MatBailie спасибо! Есть ли другой способ без использования SQL-запроса per se? (например, setParameters (x, df ["H_ID"]) спасибо
Теги:
dataframe

1 ответ

0

Код:

import pandas as pd
import numpy

df=pd.DataFrame({"H_ID":[701,702,703,704,705,706,707,708,709,710],"B":[0,0,0,0,0,0,1,1,2,2], "C":[4,3,3,3,2,2,2,1,1,2]})
s = ', '.join(map(str, df['H_ID'].as_matrix()))
q = 'SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN ({})'.format(s)
print(q)

Выход:

SELECT H_ID, CREATION_DATE FROM HOTEL WHERE H_ID IN (701, 702, 703, 704, 705, 706, 707, 708, 709, 710)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню