簡體   English   中英

如何使用python將樹莓派連接到另一台PC的數據庫

[英]How to connect raspberry pi to another PC's database using python

我當前的 RPI 中有一個數據庫。 由於我只使用 64GB SD 卡,我想刪除 rpi 中的數據庫並將其連接到我的筆記本電腦的數據庫。

我已經設置了我的 LAN,我現在可以使用我的 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

希望大家幫幫我,萬分感謝!

我不確定你的程序有什么問題。 但是,您可以試一試下面的程序!

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)")

根據您的要求相應地更改列名稱!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM