Параметры SQL должны иметь тип list, tuple или dict, но представляют собой список.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Параметры SQL должны иметь тип list, tuple или dict, но представляют собой список.

Сообщение Anonymous »

Я пытаюсь передать переменную из класса в файле Python в другой файл Python, но постоянно получаю сообщение об ошибке, сообщающее, что параметры должны иметь тип списка, dict или кортежа.
Вот то, что я считаю минимальным воспроизводимым кодом.

Код: Выделить всё

class LoginOrReg:

customtkinter.set_appearance_mode('dark')
customtkinter.set_default_color_theme('blue')

def __init__(self, db, cursor, login_username, data):
self.db = mysql.connector.connect(host = 'yourneighbourhoodscientist.co.za', user = 'hoodscientist_hoodscientist', password= 'Kscanes3394#', database="hoodscientist_HabitTracker")
self.cursor = self.db.cursor()
self.login_username = login_username
self.data = data
def login(self):
self.login_window = customtkinter.CTk()
self.login_window.geometry('400x400')
self.login_username_entry = customtkinter.CTkEntry(self.login_window, placeholder_text ='Enter Your Username')
self.login_username_entry.pack(pady=30)
self.login_username = self.login_username_entry.get()
self.login_password_entry = customtkinter.CTkEntry(self.login_window, placeholder_text ='Enter Your Password')
self.login_password_entry.pack(pady=30)
self.login_password = self.login_password_entry.get()
self.log_user_in_button = customtkinter.CTkButton(self.login_window, text = 'Login', command = self.log_user_in).pack(pady=30)
self.reg_button = customtkinter.CTkButton(self.login_window, text = 'Register New User', command = self.reg_user).pack(pady=20)
self.login_window.mainloop()

#Logs the user in
def log_user_in(self):
self.habit = HT.HabitTracker(main_window=' ', sorting_options= ' ', sort= ' ', login= ' ')
self.cursor.execute('SELECT username AND password, COUNT(*) FROM users WHERE username=%s AND password=%s GROUP BY username',(self.login_username_entry.get(), self.login_password_entry.get()))
self.cursor.fetchall()
self.row_count = self.cursor.rowcount
if self.row_count == 1:
self.cursor.execute('SELECT userID FROM users WHERE username=%s AND password=%s',(self.login_username_entry.get(), self.login_password_entry.get()))
self.data = self.cursor.fetchone()
print(self.data)
self.user_id = self.data[0]
self.habit.main_menu(LoginOrReg)
else:
self.my_label = customtkinter.CTkLabel(self.login_window, text = "User Not Found. Please Try Again.", font=('Helvetica', 10)).pack(pady=10)

login_reg = LoginOrReg(db = " ", cursor=" ", login_username= ' ', data = ' ')
login_reg.login_or_reg(root=" ")
Здесь я создал переменную в методе log_user_in. Насколько мне известно, функция «fetchone()» возвращает список.
Здесь я пытаюсь получить доступ к этой переменной во втором файле Python, а именно HabitTracker, в классе HabitTracker< /p>

Код: Выделить всё

class HabitTracker:
def __init__(self, main_window, sorting_options, sort, login) -> None:
self.main_window = main_window
self.db = mysql.connector.connect(host = 'yourneighbourhoodscientist.co.za', user = 'hoodscientist_hoodscientist', password= 'Kscanes3394#', database="hoodscientist_HabitTracker")
self.cursor = self.db.cursor()
self.sorting_options = sorting_options
self.sort = sort
self.login = login

def main_menu(self, LR):
import LoginOrReg as LR
self.login = LR.LoginOrReg(db=' ', cursor= ' ', login_username=' ', data= ' ')
self.date = datetime.today()
self.main_window = customtkinter.CTk()
self.main_window.geometry('1080x720')
self.sorting_options = ['Daily', 'Weekly', 'Monthly', 'Highest Streak',]
self.mylabel = customtkinter.CTkLabel(self.main_window, text='Welcome {}'.format(self.login.login_username), font=('Arial', 40)).pack(pady=5)
self.sort = customtkinter.CTkComboBox(self.main_window, values= self.sorting_options, command= sort_by.sort_by)
self.sort.set('Sort By')
self.sort.pack(pady=10)
self.create_new_habit_button = customtkinter.CTkButton(self.main_window, text='Create New Habit', command=create_habit.create_habit, fg_color='green').pack(pady=20)
self.cursor.execute('SELECT habit_name FROM habit WHERE user_id=%s GROUP BY habit_name', (self.login.data))
self.habits = self.cursor.fetchall()
self.j = 0
for j in self.habits:
self.habit_button = customtkinter.CTkButton(self.main_window, text=self.habits[self.j], command=lambda k = self.habits[self.j]: edit_habit.edit_habit(k))
self.habit_button.pack(pady=10)
self.j = self.j + 1
self.main_window.mainloop()

Когда я запускаю этот код, я получаю следующее сообщение об ошибке
mysql.connector.errors.ProgrammingError: Не удалось обработать параметры: str(), он должен иметь список типов, кортеж или словарь

Подробнее здесь: https://stackoverflow.com/questions/788 ... -is-a-list
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»