Синтаксическая ошибка при получении данных из SQLite - PullRequest
0 голосов
/ 20 июня 2020

При запуске следующего кода я получаю sqlite3.OperationalError: near XX error ...

Код находится в python и выглядит следующим образом:

def get(item_id='', table='groups', field='id', encrypt=True):
    conn = sqlite3.connect('data.db')
    c = conn.cursor()
    if item_id == '':
        sqlstr = 'SELECT * FROM {}'.format(table)
        c.execute(sqlstr)
    else:
        if encrypt:
            item_id = encryption.encrypt(item_id)
        sqlstr = "SELECT * FROM {} WHERE {}={}".format(table, field, item_id)
        c.execute(sqlstr)

с учетом следующие переменные:

  • table = 'groups'
  • field = 'id'
  • encrypt = True и учитывая, что значение, возвращаемое шифрованием. encrypt (item_id) is 'gAAAAABe7UPHni1WJ1pSaljNj30k_SX-xGEfyCNMwO-3Pgjm1I57ROxSq5liNnm8yk5pjv0ZY7SyTUMIYqZrOyLe16MwZNZ' в поле * 10 * 10 * в поле * 10 * 10 * пытались указать следующее * 10 * sqlstr,
    sqlstr = "SELECT * FROM {} WHERE {}='{}'".format(table, field, item_id)
    

    , но при этом я получаю следующую ошибку:

    Traceback (most recent call last):
      File "d:\dhfwi\Projects\FridaysForFuture\fff-transparency-wg\.env\lib\site-packages\telegram\utils\promise.py", line 57, in run
        self._result = self.pooled_function(*self.args, **self.kwargs)
      File "d:\dhfwi\Projects\FridaysForFuture\fff-transparency-wg\fff_automation\bots\telebot\editgroup.py", line 10, in edit_group
        group = database.get(chat_id)[0]
      File "d:\dhfwi\Projects\FridaysForFuture\fff-transparency-wg\fff_automation\modules\database.py", line 149, in get
        c.execute(sqlstr)
    sqlite3.OperationalError: near "gAAAAABe7Ue7Yg6OP2ipWHGAXfZCiCVgbpdPso3noPYCjW4ds9rY8Yg9HN0Dhm10DDh7wYQ3kf2OuSabHlxcrg5xzwEdO4V31Q": syntax error
    
    

1 Ответ

1 голос
/ 20 июня 2020

Рассмотрите возможность передачи item_id в качестве параметра с заполнителем qmark, поскольку может возникнуть путаница в кавычках:

sqlstr = "SELECT * FROM {} WHERE {}=?".format(table, field)
# sqlstr = f"SELECT * FROM {table} WHERE {field}=?"    # F-String (Python 3.6+)

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