Python - Cómo llamo un atributo desde un main (if __name__ == '__main__')?

 
Vista:
sin imagen de perfil

Cómo llamo un atributo desde un main (if __name__ == '__main__')?

Publicado por Camila (2 intervenciones) el 18/10/2021 00:42:20
Hola, soy nueva en programación y estoy haciendo un programa donde cargue un usuario y contraseña e imprima "Existe" o "No existe" dependiendo del Estado del usuario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QMainWindow
from PyQt5.uic import loadUi
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.sql.expression import null
 
engine = create_engine('postgresql://postgres:[email protected]/prueba')
datos = declarative_base()
 
class ingresar(QMainWindow):
    def __init__(self):
        super(ingresar, self).__init__()
        loadUi("ingreso.ui", self)
        self.botonIngresar.clicked.connect(ingresarFuncion.db)
 
class ingresarFuncion(datos):
    __tablename__ = "users"
    id = Column(Integer(), primary_key=True)
    username = Column(String(50), nullable=False, unique=True)
    password_db = Column(String(50), nullable=False, unique=True)
    created_at = Column(DateTime(), default=datetime.now())
 
    def db(self):
        usuario = self.usuario.text()
        password = self.password.text()
        return usuario, password
 
Session = sessionmaker(engine)
session = Session()
 
if __name__ == '__main__':
    datos.metadata.drop_all(engine)
    datos.metadata.create_all(engine)
    user1= ingresarFuncion(username = "user", password_db = "user")
 
    session.add(user1)
    session.commit()
 
    users = session.query(ingresarFuncion).filter(
        ingresarFuncion.username == usuario
    ).filter(
       ingresarFuncion.password_db == password
    )
 
    if users:
        print("Existe")
    else:
        print("No existe")
 
 
app=QApplication(sys.argv)
mainwindow=ingresar()
widget =QtWidgets.QStackedWidget()
widget.addWidget(mainwindow)
widget.setFixedWidth(1200)
widget.setFixedHeight(600)
widget.show()
app.exec_()

El problema es que no se cómo llamar a "usuario" y "password" que están dentro de la clase ingresarFuncion desde el main (donde supongo que "usuario" y "password" son atributos, pero no estoy segura).

Espero que me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cómo llamo un atributo desde un main (if __name__ == '__main__')?

Publicado por tincopasan (937 intervenciones) el 18/10/2021 02:21:21
ahí varias cosas que no entiendo de donde salen, por ejemplo la clase ingresarFuncion hereda de la clase datos y no la veo , pero más allá de eso:
ésta parte
1
ingresarFuncion.username == usuario

no estás asignando sino comparando igualdad, en todo caso sería un solo igual, para que obtenga ese valor.
que curioso que desarrolles una clase y no sepas obtener sus atributos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil

Cómo llamo un atributo desde un main (if __name__ == '__main__')?

Publicado por Camila (2 intervenciones) el 18/10/2021 02:34:05
Gracias por responder!
Respecto a lo primero, lo está heredando de declarative_base() que importé desde sqlalchemy.ext.declarative. Hasta donde tengo entendido, esta función de fábrica (declarative_base()) contruye* una clase base que por eso asocio a ingresarFuncion.

Respecto a lo otro, el tema es que no quiero igualar, sino que quiero comparar para corroborar que tanto el usuario como la contraseña que se ha ingresado sean iguales que user1. Además, si coloco un solo igual me lo marca como que hay un error de sintaxis.

Normalmente trabajo con clases un poquito más sencillas, entonces pensé que iba a ser algo similar, pero claramente no lo fue :(.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar