У меня есть база данных в моем текущем RPI. Поскольку я использую только SD-карту на 64 ГБ, я хочу удалить базу данных в моем rpi и подключить ее к базе данных моего ноутбука.
Я настроил свою локальную сеть, теперь я могу получить доступ к базе данных через браузер, используя мой IP (192.168.1.14), но мой код не работает.
Можете ли вы помочь мне, как подключить мой код python к другой базе данных.
вот мой код для подключения к база данных
import tkinter as tk
import pymysql
from tkinter import *
from tkinter import messagebox
from mfrc522 import SimpleMFRC522
import RPi.GPIO as GPIO
class Kiosk(tk.Frame):
def __init__(self, master, *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
self.master = master
master.title("Thesis")
self.login_button = Button(master, text = "Login", bg= "white")
self.login_button.pack()
self.register_button = Button(master, text="Register", command=self.register)
self.register_button.pack()
self.close_button = Button(master, text="Close", command=master.destroy)
self.close_button.pack()
self.reader = SimpleMFRC522()
self.master.configure(bg="white")
self.ws = self.master.winfo_screenwidth()
self.hs = self.master.winfo_screenheight()
self.master.geometry("{}x{}".format(self.ws, self.hs))
self.db = pymysql.connect(host = "192.168.1.14", port = 3306, user = "root",passwd = "",db= "Thesis")
self.cursor = self.db.cursor()
self.QueryResident = "CREATE TABLE IF NOT EXISTS residence (FIRST_NAME varchar(255) not null, MIDDLE_NAME varchar(255) not null, LAST_NAME varchar(255) not null,SEX varchar(255) not null, BIRTH_DATE date, CIVIL_STATUS varchar(255) not null, PLACE_OF_BIRTH varchar(255) not null, RFID varchar(255))"
self.cursor.execute(self.QueryResident)
GPIO.cleanup()
def registered(self, first_name, middle_name, last_name, sex, birth_day, civil_status, place_of_birth):
self.get_first_name = self.first_name.get()
self.get_middle_name = self.middle_name.get()
self.get_last_name = self.last_name.get()
self.get_sex = self.sex.get()
self.get_birth_day = self.birth_day.get()
self.get_civil_status = self.civil_status.get()
self.get_place_of_birth = self.place_of_birth.get()
if (self.get_first_name == "" or self.get_middle_name == "" or
self.get_last_name == "" or self.get_sex == "" or self.get_birth_day == "" or
self.get_civil_status == "" or self.get_place_of_birth == ""):
messagebox.showerror("Error!","Please complete the required field", parent = self.master_register)
else:
self.master_register.destroy()
self.RFID_registered()
def RFID_registered(self):
if (self.cursor.fetchone() is not None):
messagebox.showerror("Notice!", "RFID card is already registered", parent = self.master_register)
else:
messagebox.showinfo("Success!","Your Registration is Successful", parent = self.master_register)
self.cursor.execute ("INSERT INTO residence (FIRST_NAME, MIDDLE_NAME, LAST_NAME, SEX, BIRTH_DATE, CIVIL_STATUS, PLACE_OF_BIRTH) VALUES(%s, %s, %s, %s, %s, %s, %s)",(self.get_first_name,
self.get_middle_name,
self.get_last_name,
self.get_sex,
self.get_birth_day,
self.get_civil_status,
self.get_place_of_birth,
))
self.db.commit()
self.master_register.destroy()
GPIO.cleanup()
GPIO.cleanup()
def only_numeric_input(self, P):
if P.isdigit() or P == "":
return True
return False
def register(self):
self.master_register = Toplevel()
self.first_name = StringVar()
self.middle_name = StringVar()
self.last_name = StringVar()
self.sex = StringVar()
self.birth_day = StringVar()
self.civil_status = StringVar()
self.place_of_birth = StringVar()
self.label_head = Label(self.master_register, text = "Please fill up all informations below",bg = "white")
self.label_head.pack()
self.label_first_name = Label(self.master_register, text = "First Name",bg = "white")
self.label_first_name.pack()
self.entry_first_name = Entry(self.master_register, textvariable = self.first_name,bg = "white")
self.entry_first_name.pack()
self.label_middle_name = Label(self.master_register, text = "Middle Name",bg = "white")
self.label_middle_name.pack()
self.entry_middle_name = Entry(self.master_register, textvariable = self.middle_name,bg = "white")
self.entry_middle_name.pack()
self.label_last_name = Label(self.master_register, text = "Last Name",bg = "white")
self.label_last_name.pack()
self.entry_last_name = Entry(self.master_register, textvariable = self.last_name,bg = "white")
self.entry_last_name.pack()
self.label_sex = Label(self.master_register, text = "Sex",bg = "white")
self.label_sex.pack()
self.radio_button_sex = Radiobutton(self.master_register, text = "Male", variable = self.sex, value = "Male",bg = "white")
self.radio_button_sex.pack()
self.radio_button_sex = Radiobutton(self.master_register, text = "Female", variable = self.sex, value = "Female",bg = "white")
self.radio_button_sex.pack()
self.label_birth_day = Label(self.master_register, text = "Birth Day",bg = "white")
self.label_birth_day.pack()
self.entry_birth_day = Entry(self.master_register, textvariable = self.birth_day,bg = "white")
self.entry_birth_day.pack()
self.callback = self.master_register.register(self.only_numeric_input)
self.entry_birth_day.configure(validate = "key", validatecommand = (self.callback, "%P"))
self.label_civil_status = Label(self.master_register, text = "Civil Status",bg = "white")
self.label_civil_status.pack()
self.entry_civil_status = Entry(self.master_register, textvariable = self.civil_status,bg = "white")
self.entry_civil_status.pack()
self.label_place_of_birth = Label(self.master_register, text = "Place of Birth",bg = "white")
self.label_place_of_birth.pack()
self.entry_place_of_birth = Entry(self.master_register, textvariable = self.place_of_birth,bg = "white")
self.entry_place_of_birth.pack()
self.button_submit = Button(self.master_register, text = "Submit",bg = "white", command = lambda: self.registered(self.first_name, self.middle_name,
self.last_name, self.sex, self.birth_day,
self.civil_status, self.place_of_birth))
self.button_submit.pack()
if __name__== "__main__":
root = Tk()
main = Kiosk(root)
root.mainloop()
Here's the error I've encountered.
`/usr/local/lib/python3.7/dist-packages/mfrc522/MFRC522.py:151: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin_rst, GPIO.OUT)
Traceback (most recent call last):
File "/home/pi/stack.py", line 145, in <module>
main = Kiosk(root)
File "/home/pi/stack.py", line 29, in __init__
self.db = pymysql.connect(host = "192.168.1.14", port = 3306, user = "root",passwd = "",db= "Thesis")
File "/usr/local/lib/python3.7/dist-packages/pymysql/__init__.py", line 94, in Connect
return Connection(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/pymysql/connections.py", line 325, in __init__
self.connect()
File "/usr/local/lib/python3.7/dist-packages/pymysql/connections.py", line 598, in connect
self._get_server_information()
File "/usr/local/lib/python3.7/dist-packages/pymysql/connections.py", line 975, in _get_server_information
packet = self._read_packet()
File "/usr/local/lib/python3.7/dist-packages/pymysql/connections.py", line 671, in _read_packet
% (packet_number, self._next_seq_id))
pymysql.err.InternalError: Packet sequence number wrong - got 1 expected 0
Надеюсь, вы, ребята, можете мне помочь, большое спасибо!