SQLite получит ИТОГО из списка столбцов? - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь подвести итоговое значение в моих столбцах. У меня есть 5 столбцов, и я могу получить общие значения 1 на 1 с помощью:

import sqlite3
list2 = ['Food', 'Transport', 'Insurance', 'Installments', 'Others']

def expensedata():
    con = sqlite3.connect("expense.db")
    c = con.cursor()
    c.execute("CREATE TABLE IF NOT EXISTS expense (id INTEGER PRIMARY KEY,\
     food real, transport real, insurance real, installments real, others real)")
    con.commit()
    con.close()

expensedata()



con = sqlite3.connect("expense.db")
    c = con.cursor()
    c.execute("SELECT TOTAL(food) FROM expense")
    print(c.fetchall()[0])
    con.close()

Я могу получить сумму как 26.0 для этого столбца.

Но вместо того, чтобы повторять этот код n раз для n столбцов, я пытаюсь:

con = sqlite3.connect("expense.db")
    c = con.cursor()
    for i in range(len(list2)):
        c.execute("SELECT TOTAL(?) FROM expense", (list2[i],))
        print(c.fetchall()[0])
    con.close()

но вместо этого получается (0.0,) (0.0,) (0.0,) (0.0,) (0.0,).

Как мне решить эту проблему? Спасибо

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Вместо этого, чтобы выбрать всего для всех столбцов посредством одного запроса SQL - вы можете составить запрос соответствующим образом:

list2 = ['Food', 'Transport', 'Insurance', 'Installments', 'Others']
...
con = sqlite3.connect("expense.db")
c = con.cursor()

# just for testing
sql = ''' INSERT INTO expense(food, transport, insurance, installments, others)
             VALUES(?,?,?,?,?) '''

# sample records inserted into empty DB
c.execute(sql, range(0,5))
c.execute(sql, range(5,10))
c.execute(sql, range(10,15))

c.execute("SELECT {} FROM expense"
          .format(', '.join('TOTAL({})'.format(col.lower()) for col in list2)))
print(c.fetchall()[0])
con.close()

Выход:

(15.0, 18.0, 21.0, 24.0, 27.0)
1 голос
/ 05 июля 2019

Просто используйте форматирование строки:

c.execute("SELECT TOTAL(%s) FROM expense" % list2[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...