Мы будем благодарны за любую помощь по этой проблеме.
Итак, в основном я хочу запустить запрос к моей базе данных SQL и сохранить возвращенные данные в виде структуры данных Pandas.
Я прикрепил код для запроса.
Я читаю документацию по Pandas, но не могу определить тип возвращаемого значения моего запроса.
Я попытался распечатать результат запроса, но он не дает никакой полезной информации.
Спасибо!!!!
from sqlalchemy import create_engine
engine2 = create_engine('mysql://THE DATABASE I AM ACCESSING')
connection2 = engine2.connect()
dataid = 1022
resoverall = connection2.execute("
SELECT
sum(BLABLA) AS BLA,
sum(BLABLABLA2) AS BLABLABLA2,
sum(SOME_INT) AS SOME_INT,
sum(SOME_INT2) AS SOME_INT2,
100*sum(SOME_INT2)/sum(SOME_INT) AS ctr,
sum(SOME_INT2)/sum(SOME_INT) AS cpc
FROM daily_report_cooked
WHERE campaign_id = '%s'", %dataid)
Так что я вроде как хочу понять, каков формат / тип данных моей переменной «resoverall» и как поместить ее в структуру данных PANDAS.
python
mysql
data-structures
pandas
user1613017
источник
источник
Ответы:
Вот самый короткий код, который выполнит эту работу:
Вы можете пойти более изысканно и проанализировать типы, как в ответе Пола.
источник
df = DataFrame(cursor.fetchall())
возвращаетсяValueError: DataFrame constructor not properly called!
, похоже, что кортеж кортежей неприемлем для конструктора DataFrame. Также нет.keys()
курсора ни в режиме словаря, ни в режиме кортежа.keys()
функцией, но не могу заставить его работать.df.columns=[ x.name for x in recoverall.description ]
Изменить: март 2015 г.
Как указано ниже, pandas теперь использует SQLAlchemy как для чтения из ( read_sql ), так и для вставки в ( to_sql ) базы данных. Следующее должно работать
Предыдущий ответ: Via mikebmassey из аналогичного вопроса
источник
pd.read_sql()
в приведенном выше фрагменте кода?pyodbc
иpandas
вместе. Добавление нового ответа с примером, FYI.Если вы используете ORM SQLAlchemy, а не язык выражений, вы можете захотеть преобразовать объект типа
sqlalchemy.orm.query.Query
во фрейм данных Pandas.Самый чистый подход - получить сгенерированный SQL из атрибута оператора запроса, а затем выполнить его с помощью
read_sql()
метода pandas . Например, начиная с объекта Query с именемquery
:источник
pandas.read_sql_query
, передавquery.statement
ему. См. Этот ответ: stackoverflow.com/a/29528804/1273938Изменить 2014-09-30:
pandas теперь имеет
read_sql
функцию. Вы определенно захотите использовать это вместо этого.Оригинальный ответ:
Я не могу помочь вам с SQLAlchemy - я всегда использую pyodbc, MySQLdb или psychopg2 по мере необходимости. Но при этом мне подходит такая простая функция, как приведенная ниже:
источник
read_sql
все еще может принимать соединения, отличные от SQLAlchemy, например, через pyodbc, psychopg2 и т. Д.Коннектор MySQL
Для тех, кто работает с соединителем mysql, вы можете использовать этот код в качестве начала. (Спасибо @Daniel Velkov)
Использованные ссылки:
источник
Вот код, который я использую. Надеюсь это поможет.
источник
Это короткий и четкий ответ на вашу проблему:
источник
1. Использование MySQL-connector-python
2. Использование SQLAlchemy
источник
Как и Натан, я часто хочу выгружать результаты sqlalchemy или sqlsoup Query во фрейм данных Pandas. Мое собственное решение для этого:
источник
pandas.read_sql_query
, передаваяquery.statement
ему. См. Этот ответ: stackoverflow.com/a/29528804/1273938resoverall
является объектом sqlalchemy ResultProxy. Вы можете узнать больше об этом в документации sqlalchemy , последняя объясняет базовое использование работы с движками и соединениями. Важно здесь то, чтоresoverall
такое изречение.Pandas любит dict like objects для создания своих структур данных, см. Онлайн-документацию
Удачи с sqlalchemy и пандами.
источник
Просто используйте
pandas
иpyodbc
вместе. Вам нужно будет изменить строку подключения (connstr
) в соответствии со спецификациями вашей базы данных.Я использовал
pyodbc
несколько корпоративных баз данных (например, SQL Server, MySQL, MariaDB, IBM).источник
to_sql
метод наDataFrame
объекте. По умолчанию этот метод использует SQLite, поэтому вам необходимо явно передать ему объект, указывающий на базу данных MSSQL. См. Документы .pandas
более оптимизированным для легкой работы с ETL, но, увы ...Это старый вопрос, но я хотел добавить свои два цента. Я прочитал вопрос как «Я хочу выполнить запрос к моей [моей] базе данных SQL и сохранить возвращенные данные как структуру данных Pandas [DataFrame]».
Из кода похоже, что вы имеете в виду базу данных mysql и предполагаете, что имеете в виду pandas DataFrame.
Например,
Это импортирует все строки testTable в DataFrame.
источник
Вот мой. На всякий случай, если вы используете pymysql:
источник
pandas.io.sql.write_frame УСТАРЕЛ. https://pandas.pydata.org/pandas-docs/version/0.15.2/generated/pandas.io.sql.write_frame.html
Следует изменить на использование pandas.DataFrame.to_sql https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
Есть другое решение. PYODBC в Pandas - DataFrame не работает - форма переданных значений (x, y), индексы подразумевают (w, z)
Начиная с Pandas 0.12 (я считаю) вы можете:
До версии 0.12 вы могли:
источник
Прошло много времени с последнего поста, но, возможно, это кому-то поможет ...
Короткий путь, чем у Пола Н:
источник
лучший способ сделать это
источник
Если тип результата - ResultSet , вы должны сначала преобразовать его в словарь. Затем столбцы DataFrame будут собираться автоматически.
Это работает в моем случае:
источник