Python SQLite3 SELECT приводит к массиву векторов - PullRequest
0 голосов
/ 06 марта 2020

Во время извлечения данных из базы данных мои данные преобразуются из скалярного массива в векторный массив где-то между следующим кодом:

def analysis():
labels = ["Appearance", "Hygiene", "Staff", "Quality", "Value", "Overall"]
survey_mean = []
industry_mean = []
conn = sqlite3.connect('mysteryshopper.db')
c = conn.cursor()
avg1 = c.execute ("""SELECT avg(appearance) FROM survey WHERE storeid = 1 """)
avg1s = c.fetchall()
print (avg1s)
avg2 = c.execute ("""SELECT avg(hygiene) FROM survey WHERE storeid = 1 """)
avg2s = c.fetchall()
avg3 = c.execute ("""SELECT avg(staff) FROM survey WHERE storeid = 1 """)
avg3s = c.fetchall()
avg4 = c.execute ("""SELECT avg(quality) FROM survey WHERE storeid = 1 """)
avg4s = c.fetchall()
avg5 = c.execute ("""SELECT avg(value) FROM survey WHERE storeid = 1 """)
avg5s = c.fetchall()
avg6 = c.execute ("""SELECT avg(overall) FROM survey WHERE storeid = 1 """)
avg6s = c.fetchall()
parameter_survey = [avg1s, avg2s, avg3s, avg4s, avg5s, avg6s]
survey_mean.append(parameter_survey)
print (survey_mean)

Исходные данные перед вставкой в ​​базу данных находятся в формат "(3.9)".

Тестирование avg1s выше выводит "(3.9,)", с дополнительной запятой в массиве, казалось бы, из ниоткуда, и это вызывает дальнейшие проблемы с моей задачей matplotlib.

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Попробуйте использовать fetchone, поскольку средние возвращают одну строку и даже объединяют все запросы в один. Затем распакуйте результат в отдельные переменные или преобразуйте выборку курсора в список:

sql = """SELECT avg(appearance) AS avg_appearance,
                avg(hygiene) AS avg_hygiene,
                avg(staff) AS avg_staff,
                avg(quality) AS avg_quality,
                avg(value) AS avg_value,
                avg(overall) AS avg_overall
         FROM survey 
         WHERE storeid = 1
      """

c.execute(sql)
avg1s, avg2s, avg3s, avg4s, avg5s, avg6s = c.fetchone()

parameter_survey = [avg1s, avg2s, avg3s, avg4s, avg5s, avg6s]
# parameter_survey = list(c.fetchone())  # ALTERNATIVE
survey_mean.append(parameter_survey)
print(survey_mean)
0 голосов
/ 06 марта 2020

В качестве векторного массива нет ничего, что может вернуть sql. Но fetchall возвращает список строк, а строка представляет собой итерацию значений полей (по умолчанию кортеж или список).

То, что вы хотите:

avg1 = c.execute ("""SELECT avg(appearance) FROM survey WHERE storeid = 1 """)
avg1s = [row[0] for row in avg1s]

( потому что курсор - это итерация строк)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...