Попытка построить параметры sqlite3, используя переменные в python - PullRequest
0 голосов
/ 13 марта 2019

Я работаю над менеджером паролей, используя python и squlite3.Я новичок в БД.Мне нужно передать параметры курсору, и я хочу сделать это динамически.Что у меня сейчас:

cursor.execute("""INSERT INTO  Passwords (TYPE, SITE, LOGIN, MDP, COMMENTS1) VALUES (?,?,?,?,?);""",(value1, value2, value3, value4, value5))

Работает хорошо, но таблица (пароли) и столбцы (TYPE, SITE, LOGIN, MDP, COMMENTS1) жестко закодированы.Я перепробовал все варианты, которые я нашел в Интернете, но я не смог заставить переменные работать.

Я написал альтернативу:

"INSERT INTO {0} ({1}, {2}, {3}, {4}, {5}) VALUES ({6}, {7}, {8}, {9}, {10})".format(table, column1, column2, column3, column4, column5, value1, value2, value3, value4, value5)

Фрагмент хороший и все, но возвращает ошибку с переменной, содержащей пароль (sqlite3.OperationalError: нераспознанный токен: "4zMB5e $ 94t"):

Я застрял на 2 дня.Кто-нибудь может направить меня?

1 Ответ

0 голосов
/ 15 марта 2019

Спасибо за ваши комментарии, все полезно.Я нашел способ обойти мою маленькую проблему: 1) столбцы остаются жестко закодированными, они все равно не изменятся (я не могу вспомнить, что я имел в виду ...) 2) имя таблицы также остается скрытым.Выбор из выпадающего меню проходит через набор условий if.Проблема решена, .формат отброшен.Я думаю, что ему не хватает элегантности, но это работает.

    try:

        if table == 'table1':
            self.cursor.execute("INSERT INTO table1 (TYPE, SITE, LOGIN, PW, COMMENTS1) VALUES (?, ?, ?, ?, ?)", (value1, value2, value3, value4, value5))
            self.cursor.execute("INSERT INTO complete (LIST) VALUES (?)", (value4,))           
        elif table == 'email':
            self.cursor.execute("INSERT INTO email (TYPE, SITE, LOGIN, PW, COMMENTS1) VALUES (?, ?, ?, ?, ?)", (value1, value2, value3, value4, value5))
            self.cursor.execute("INSERT INTO complete (LIST) VALUES (?)", (value4,))           

        self.connection.commit()
        print("done saving") 

    except sqlite3.IntegrityError:
        print('Record already exists')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...