Я использую скрипт, который собирает данные из базы данных. Я хотел немного доработать скрипт, но столкнулся с проблемой.
Я выполняю запрос, который, как я знаю, будет ВСЕГДА возвращать только одну строку с 3 значениями в ней. Я хочу распаковать эти значения в отдельные переменные, но только последнее, похоже, действительно имеет какую-то ценность.
Вот мой код:
import pymysql
cnx = pymysql.connect(host=dbHost, database=dbName, user=dbUser, passwd=dbPass)
query = "select id_parameter,unit,shortname from t_list_metpara where shortname='TT'"
with cnx.cursor() as cursor1:
cursor1.execute(query)
row = cursor1.fetchone()
cnx.close()
id_parameter, unit, shortname = row[:3]
print(row)
print(id_parameter, unit, shortname)
print([type(v) for v in [id_parameter, unit, shortname]])
print([row[v] for v in [0, 1, 2]])
и результат:
(1, '°C\r', 'tt')
tt
[<class 'int'>, <class 'str'>, <class 'str'>]
[1, '°C\r', 'tt']
Может ли кто-нибудь объяснить мне, почему Python (или пакет pymysql) ведет себя таким образом и что я могу сделать, чтобы избежать этого?
Это не имеет ничего общего с pymysql или даже с самим Python, и нет ничего плохого в ваших переменных.
\r
означает символ возврата каретки. Если вы печатаете что-то, за которым следует a \r
, позиция курсора вернется к началу строки; следующий символ начнется с начала этой строки. Если вы напечатали каждый из id_paramter
, unit
и shortname
отдельно, вы увидите все данные.