Я пытаюсь создать инструмент командной строки, который генерирует случайную строку (пароль) заданной длины, сохраняет ее в sql дБ и может запрашиваться по имени. Генерация пароля и сохранение его вывода по заданному имени прекрасно работает, но попытка выбрать только элемент пароля доставляет мне проблемы. Я был в состоянии выбрать все из таблицы, но это возвращает имя и пароль. Я только хочу вернуть пароль. Я думал о том, чтобы просто объединить вывод или даже использовать команду linux cut
, но я бы предпочел просто получить его из оператора select. Это возможно? Мой текущий SELECT
оператор возвращает: operation parameter must be a str
. Когда я пытаюсь сделать это без вызова (name)
в конце оператора SELECT
следующим образом: query_password = """SELECT * FROM password_table WHERE name = ?"""
я получаю эту ошибку:
File "passbox.py", line 44, in <module>
query_pswd_by_name(name)
File "passbox.py", line 39, in query_pswd_by_name
c.execute(query_password)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 0 supplied.
Кстати, я уверен, что моя query_pswd_by_name
функция все неправильно, я экспериментировал. Когда я просто создаю соединение и оператор SELECT вне функции, возвращает имя и пароль.
Также обратите внимание, что для этой статьи я замаскировал имя файла базы данных звездочками. Я на практике использую действующий файл БД.
Вот весь код, который я написал до сих пор:
import secrets
import string
import sqlite3
#CREATE PASSWORD OF GIVEN LENGTH
def get_pass(length):
return "".join(secrets.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation) for x in range(length))
length = int(input("Enter the length of password: "))
password= get_pass(length)
print(password)
name = str(input("Enter name for password: "))
#CREATE DATABASE CONNECTION
conn = sqlite3.connect("****.db")
#CREATE CURSOR OBJECT
c = conn.cursor()
#CREATE TABLE IN DISK FILE BASED DATABASE
c.execute("""CREATE TABLE IF NOT EXISTS password_table (
name TEXT,
pswd TEXT
)""")
c.execute("INSERT INTO password_table (name, pswd) VALUES (?, ?)", (name, password))
#COMMIT CHANGES
conn.commit()
conn.close()
def query_pswd_by_name(name):
conn = sqlite3.connect('****.db')
c = conn.cursor()
query_password = """SELECT * FROM password_table WHERE name = ?""", (name)
c.execute(query_password)
result = c.fetchall()
for row in result:
print(row[1])
conn.commit()
query_pswd_by_name(name)
#CLOSE CONNECTION
conn.close()```