SQL-код tin python, который принимает входную информацию

#python #sql #sqlite

#python #sql #sqlite

Вопрос:

У меня есть следующая функция Python, которая использует SQL-код и задает определенное ключевое слово для выполнения некоторых вычислений. Как я могу переопределить эту функцию, чтобы она запрашивала у пользователя ключевое слово, т. Е. Ключевое слово не обязательно должно быть предопределено в SQL-коде?

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

 def proto(cursor):
    cursor.execute('select protein.accession, keyword from protein JOIN protein_keywords ON protein.accession=protein_keywords.accession JOIN species ON protein.species_id=species.species_id where keyword="Zytocin";')
    return cursor.fetchall()
 

ОТРЕДАКТИРОВАНО на основе ответа:

 def zroto(cursor):
    cursor.execute('select latin AS ART, count(*) AS Antal from protein, species where species.species_id = protein.species_id group by species.species_id;')
    return cursor.fetchall()


def proto(cursor):
     sql = 'select protein.accession, keyword from protein JOIN protein_keywords 
     ON protein.accession=protein_keywords.accession JOIN species ON 
     protein.species_id=species.species_id where keyword = ?;'

     k=input('Enter the value of keyword')
     cursor.execute(sql,[k],)
     return cursor.fetchall()

def main(db_file):
    con, cur = get_connection(db_file)
    zroto_1 = zroto(cur)
    proto_1 = proto(cur)
    for row in zroto_1, proto_1:
        print(row)
 

Комментарии:

1. Я использую sqlite3, а для python 3.7 я использую Spyder на компьютере с Windows.

2. просто замените %s; на ? при использовании cursor.execute(sql, ("Zytocin",))

3. Это было приятно, но я хочу вручную ввести слово, например, «Zytocin», в консоли, а затем получить правильный вывод. Не то, чтобы я должен был вводить это слово уже в коде. Как я могу это сделать?

4. Например, если я набираю proto («Zytocin» ) в консоли, я получаю только «AttributeError: объект ‘str’ не имеет атрибута ‘execute'».

5. Как я обновил код в вопросе выше?

Ответ №1:

Вы бы использовали подготовленный оператор:

 sql = 'select protein.accession, keyword from protein JOIN protein_keywords ON protein.accession=protein_keywords.accession JOIN species ON protein.species_id=species.species_id where keyword = %s;'
cursor.execute(sql, ("Zytocin",))
return cursor.fetchall()
 

Комментарии:

1. Хорошо, но я хочу, чтобы пользователь программы вручную написал слово. Например, если пользователь вводит «zyto», то ничего не должно произойти, но если вы напишете «Zytocin», должны быть напечатаны правильные данные.

2. Я имею в виду, что вы, возможно, сможете ввести любое слово, но только, например, «Zytocin», даст результат. Кроме того, когда я ввел ваш код, я получил только «OperationalError: около «%»: синтаксическая ошибка».

3. См. Отредактированный ответ. Могу ли я использовать этот код?