Как я могу успешно передать переменную в мой оператор SELECT sqlite? - PullRequest
0 голосов
/ 03 января 2019

Я пишу небольшую программу, которая позволяет мне искать в базе данных sqlite, assets по номеру ресурса, серийному номеру и т. Д. Проблема в том, что я не уверен, что должен передавать пользовательский ввод, переменная assetNum, в мое заявление sqlite SELECT. Я хотел бы, чтобы он взял запрос пользователя assetNum и вернул эту строку из таблицы sqlite.

Сначала я определил свою функцию:

def search_asset_num(conn):

    cur = conn.cursor()
    cur.execute("SELECT * FROM assets WHERE AssetNumber = '{}'".format(assetNum))

    rows = cur.fetchall()

    for row in rows:
        print(row)

В программе я использую пользовательский ввод для перемещения по меню, поэтому позже в программе, когда я доберусь до «меню поиска по активам», у меня будет:

   elif selection == '2':

            menu2 = {}
            menu2['        1'] = "Search Assets by Name"
            menu2['        2'] = "Search Assets by Asset Number"
            menu2['        3'] = "Search Assets by Serial Number"
            menu2['        4'] = "Search Assets by Ownership"
            menu2['        5'] = "Go back!"

            choices2 = menu2.keys()
            for entry in choices2:
                print(entry, menu2[entry])

            selection2 = input("Enter number: ")

            if selection2 == '2':

                assetNum = input("Enter Asset Number: ")

                search_asset_num(conn)

Проблема, насколько я могу судить, заключается в том, что assetNum присутствует в функции search_asset_num() выше, где она фактически определена в операторе if как assetNum = input("Enter Asset Number: "). Я не уверен, как обойти это. Я пытался сделать assetNum глобальным в самом верху моего кода и установить его равным 0 в качестве заполнителя, но это не сработало. Он просто выводит 0 на терминал.

1 Ответ

0 голосов
/ 03 января 2019

Добавьте assetNum в качестве параметра к вашей функции,

def search_asset_num(conn, assetNum):
    cur = conn.cursor()
    cur.execute("SELECT * FROM assets WHERE AssetNumber = ?", (assetNum,))
    rows = cur.fetchall()
    for row in rows:
        print(row)

в вашем меню вы можете изменить, как показано ниже:

        if selection2 == '2':
            assetNum = input("Enter Asset Number: ")
            search_asset_num(conn, assetNum)

также используйте «Подстановку параметров», как указано в Python sqlite3 - документация DB-API

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