Как подключить raspberry pi к другой базе данных P C, используя python - PullRequest
0 голосов
/ 09 января 2020

У меня есть база данных в моем текущем 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

Надеюсь, вы, ребята, можете мне помочь, большое спасибо!

1 Ответ

0 голосов
/ 09 января 2020

Я не совсем уверен, что не так с вашей программой. Тем не менее, вы можете попробовать следующую программу!

import pymysql as db
try:
    con=db.connect("Enter the host here ","user_name","pass_word","db_name")
except Exception as e:
    print(e)
con.autocommit(True)
with con:
        cur=con.cursor()
        cur.execute("DROP table if exists Test_Table")
        cur.execute("CREATE TABLE Test_Table(id INT PRIMARY KEY AUTO_INCREMENT, name varchar(20),Time timestamp,age float(20)")

Измените имена столбцов в соответствии с вашими требованиями!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...