почему не работает оператор Dynami c sqlite, но будет работать тот же оператор stati c? - PullRequest
1 голос
/ 07 мая 2020

это мой первый пост о переполнении стека ... заранее спасибо за любую помощь Я очень новичок в программировании, и я создал функцию в Python для динамического поиска в базе данных sqlite3 вместо того, чтобы вводить тонны запросов . Я покажу код и попытаюсь объяснить, что я намеревался сделать на всех этапах. Короче говоря, мой cursor.fetchall () всегда оценивается как пустой, даже если я уверен, что в базе данных есть значение, которое он должен найти.

def value_in_database_check(table_column_name: str, value_to_check: str):
    db, cursor = get_connection() # here i get a database and cursor connection
    for tuple_item in schema(): # here i get the schema of my database from another function
        if tuple_item[0] == "table": # now I check if the tuple is a table
            schema_table = tuple_item[4] # this just gives me the table info of the tuple
            # this lets me know the index of the column I am looking for in the table
            found_at = schema_table.find(table_column_name)
            # if my column value was found I will enter this block of code
            if not found_at == -1:
                table_name = tuple_item[1]
                to_find_sql = "SELECT * FROM {} WHERE ? LIKE ?".format(table_name)
                # value_to_check correlates to table_column_name
                # example "email", "this@email.com"
                cursor.execute(to_find_sql, (table_column_name, value_to_check))
                # this always evaluates to an empty list even if I am certain that the
                # information is in the database
                fetch_to_find = cursor.fetchall()
                if len(fetch_to_find) > 0:
                    return True
    else:
        return False

1 Ответ

0 голосов
/ 07 мая 2020

Я считаю, что ? может использоваться только в качестве заполнителя для значений, а не для имен таблиц или - как вы пытаетесь сделать - столбцов. Вероятное исправление (хотя и не тестировал):

to_find_sql = "SELECT * FROM {} WHERE {} LIKE ?".format(table_name, table_column_name)
cursor.execute(to_find_sql, (value_to_check, ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...