#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. См. Отредактированный ответ. Могу ли я использовать этот код?