Запрос, выполненный с помощью PyMySQL, приводит к копиям имен столбцов.Python

Программы на Python
Ответить
Anonymous
 Запрос, выполненный с помощью PyMySQL, приводит к копиям имен столбцов.

Сообщение Anonymous »

Я хотел бы импортировать некоторые данные, хранящиеся в базе данных MySQL, в среду Python. Я использовал pymysql для соединения. Затем я попытался отправить следующий запрос из Python в MySQL.

Код: Выделить всё

def get_latest_window(resv, start_date):
connection = pymysql.connect(
host=,
port=3306,
user=,
password=,
database=,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
query = """
SELECT *
FROM reservoir_minutely
WHERE facility_id = %s #11
AND collected_at >= %s #'2024-01-01 00:01'
AND collected_at < DATE_ADD(%s, INTERVAL 3 HOUR)
ORDER BY collected_at ASC
"""

print(query)
df = pd.read_sql(query, connection, params=(11, start_date, start_date))
return df

df = get_latest_window(11,'2024-01-01 00:01')
df.head()
Проблема в том, что возвращаемые строки не содержат значений, а являются просто копиями имен столбцов. Блок ниже является результатом блока выше.

Код: Выделить всё

    collected_at    facility_id press_in    flow_in flow_out    level   degree
0   collected_at    facility_id press_in    flow_in flow_out    level   degree
1   collected_at    facility_id press_in    flow_in flow_out    level   degree
2   collected_at    facility_id press_in    flow_in flow_out    level   degree
3   collected_at    facility_id press_in    flow_in flow_out    level   degree
4   collected_at    facility_id press_in    flow_in flow_out    level   degree
Столбец определяется в MySQL с типами:
  • collected_at : DATETIME
  • facility_id : INT
  • press_in : DOUBLE
  • flow_in : DOUBLE
  • flow_out : DOUBLE
  • level : DOUBLE
  • степень : DOUBLE
Пример данных из таблицы

Изображение

Я также попробовал проверить тип строки в моем фрейме данных и элемент внутри строки. Удивительно, но типы были изменены по мере того, как значения попадали в среду Python.

Код: Выделить всё

print(type(df.iloc[0].iloc[0]))
df.iloc[0].values

Код: Выделить всё

array(['collected_at', 'facility_id', 'press_in', 'flow_in', 'flow_out',
'level', 'degree'], dtype=object)
Сначала я думал, что запрашиваю выбор строковых значений, но потом понял, что поставил SELECT *, поэтому, должно быть, он не выбирает строковые значения. На самом деле он ищет правильную таблицу, поскольку я не указал явно имена столбцов внутри запроса. Возможно, они появились как объект, содержащий значение в виде поля (предполагаю это из dtype=object), но затем, когда я проверяю каждый элемент, они имеют тип «str», поэтому нет внутреннего значения, которое я мог бы вызвать из объекта.


Подробнее здесь: https://stackoverflow.com/questions/798 ... lumn-names
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»