Я хочу запросить базу данных Microsoft SQL Server с помощью пакета turbodbc. Отойдя от pyodbc по соображениям скорости ...
Документы на этот замечательный маленький пакет находятся здесь:
https://turbodbc.readthedocs.io/en/latest/pages/advanced_usage.html#advanced-usage
Существует опция, позволяющая получать наборы результатов с единым целым в пакетах.
Это пример, приведенный:
cursor.execute("SELECT A, B FROM my_table")
batches = cursor.fetchnumpybatches()
for batch in batches:
print(batch)
Вывод OrderedDcit выглядит следующим образом:
OrderedDict([('A', masked_array(data = [42 --],
mask = [False True],
fill_value = 999999)),
('B', masked_array(data = [3.14 2.71],
mask = [False False],
fill_value = 1e+20))])
Я бы хотел использовать этот метод для загрузки данных в панд. Имеется аргумент read_buffer_size
, который делает этот метод очень удобным для меня, так как мне приходится запрашивать довольно большой объем данных.
Я уже могу перейти от numpy к пандам без итерации, используя fetchallnumpy
.
Мой метод для этого:
conn = turbodbc.connect(connection_string = connstring)
cursor = conn.cursor()
cursor.execute("SELECT * from table")
table = cursor.fetchallnumpy()
df = pd.DataFrame(table,columns=table.keys())
cursor.close()
conn.close()
Но мне бы очень хотелось реализовать это для панд, используя fetchnumpybatches