Вставить данные с метки в MySql python

Я хочу добавить значение метки в свою базу данных из MySQL. Я хочу сделать это, потому что я не хочу, чтобы пользователь выбирал данные каждый раз, когда он вставляет что-либо. Вот код:

from tkinter import *
from tkinter import messagebox
import mysql.connector
import datetime


def Ok():
    tip=e1.get()
    descriere=e2.get()
    data=e3.get()
    timp=e4.get()

    mysqldb = mysql.connector.connect(host = "localhost",user = "root",password = "", database = "reglog")
    mycursor= mysqldb.cursor()

    try:
        sql = "INSERT INTO anunturib(id,tip,descriere,data,timp) VALUES (%s,%s,%s,%s,%s)"
        val = ("",tip,descriere,data,timp)
        mycursor.execute(sql,val)
        mysqldb.commit()
        messagebox.showinfo("information","Record inserted succesfully!")

    except Exception as e:
        print(e)
        mysqldb.rollback()
        mysqldb.close()

        

root= Tk();
root.title("Anunturi")
root.geometry("300x250")
global e1
global e2
global e3
global e4



Label(root,text = "Tip cerere:").place(x=10,y=10)
Label(root,text = "Descriere").place(x=10,y=40)
Label(root,text = "Data publicare:").place(x=10,y=80)
Label(root,text = "Data expirare:").place(x=10,y=120)

TodayDate = datetime.datetime.now()
an = TodayDate.strftime("%Y")
luna = TodayDate.strftime("%m")
zi = TodayDate.strftime("%d")
data=zi + "-" + luna + "-" + an

e3=Label(root,text=data).place(x=148,y=80)


e1 = Entry(root)
e1.place(x=148,y=10)

e2 = Entry(root)
e2.place(x=148,y=40)



e4 = Entry(root)
e4.place(x=148,y=120)

Button(root,text = "Add",command=Ok ,height=3, width=13).place(x=10,y=180)

root.mainloop()

Я не нашел ничего, связанного с этим. Таким образом я получаю ошибку: данные = e3.получить () AttributeError: объект «NoneType» не имеет атрибута «получить»

e3=Label(root,text=data).place(x=148,y=80) присвоит возвращаемое значение Label.place()e3. Я предполагаю, что это значение равно None.
snakecharmerb 19.03.2022 19:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Изменить e3=Label(root,text=data).place(x=148,y=80) на

e3=Label(root,text=data)
e3.place(x=148,y=80)

Хорошо, теперь я получаю эту ошибку: Файл "C:\xampp\htdocs\licenta\python\insert.py", строка 10, в Ok data=e3.get() AttributeError: объект "Label" не имеет атрибута "get"

DariusMan 19.03.2022 19:21

Проблема именно в том, что говорится в сообщении об ошибке. e3 содержит ссылку на объект Label, а объект Label не имеет атрибута с именем get... то есть он не поддерживает метод get(). У объекта Entry есть метод get(). Вот почему два вызова get() перед тем, который дал сбой, работают нормально. - Вроде смысл, да? Метка - это просто визуальная вещь... она не принимает ввод, поэтому нет смысла пытаться получить от нее значение.

CryptoFool 19.03.2022 19:30

Хорошо, это было ясно. У вас был другой вариант, чтобы получить эту дату? Я имею в виду, может быть, я храню его в другом объекте?

DariusMan 19.03.2022 19:41
Ответ принят как подходящий

Ответ рядом с вами! Что вам нужно, так это значение метки, и каково значение метки? Переменная data. Итак, вы не можете использовать e3.get() по 2 причинам. Во-первых, get() не существует для Label. Во-вторых, текст метки не зависит от значения data. Таким образом, вы можете просто вставить его:

def Ok():
    tip=e1.get()
    descriere=e2.get()
    # data=e3.get() # Don't define `data`, so `data` is the old data defined before
    timp=e4.get()
    ....
    ....

Также вам не нужно вручную получать день, месяц и год и превращать все это в строку. Вместо этого используйте strftime, например:

today_date = datetime.datetime.now()
fmt = '%d-%m-%Y' # Format you want to change a datetime obj to
data = datetime.datetime.strftime(today_date,fmt) 

Так же хочется упомянуть, что текст этикетки всегда можно получить с помощью e3.cget('text') или e3['text']. Но нам это не нужно здесь, так как это просто переменная data.

Также, чтобы понять, почему вы получили начальную AttributeError, прочитайте: Tkinter: AttributeError: объект NoneType не имеет атрибута <имя атрибута>

Другие вопросы по теме