Python - Error al crear tablas desde código Python (SQLAlchemy)

 
Vista:
sin imagen de perfil

Error al crear tablas desde código Python (SQLAlchemy)

Publicado por Leonardo (2 intervenciones) el 16/08/2023 21:22:01
Buen día a todos.
Agradecería a mucho a aquel que me pudiera ayudar con este error que me ha estado dando problemas.
Verán tengo instaladas las versiones mas nuevas de Python y MySQL, en Python tengo un script que se encarga de crear unas tablas en la base de datos, el script es llamado "modellogs.py" es el siguiente:
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
from app import db
 
class carlogs(db.Model):
    __tablename__ = 'carlogs'
    __table_args__ = {'extend_existing': True}
    id = db.Column('ID', db.Integer, primary_key=True)
    make = db.Column('MAKE', db.String(80), nullable=False)
    model = db.Column('MODEL', db.String(80), nullable=False)
    year = db.Column('YEAR', db.SmallInteger, nullable=False)
    lkpyear = db.Column('LKPYEAR',db.SmallInteger, nullable=False)
    lkpmonth = db.Column('LKPMONTH',db.SmallInteger, nullable=False)
    lkpday = db.Column('LKPDAY',db.SmallInteger, nullable=False)
    lkphour = db.Column('LKPHOUR',db.SmallInteger, nullable=False)
    lkpminute = db.Column('LKPMINUTE',db.SmallInteger, nullable=False)
    lkpsecond = db.Column('LKPSECOND',db.SmallInteger, nullable=False)
 
    def __init__(self, make, model, year, lkpyear, lkpmonth, lkpday, lkphour, lkpminute, lkpsecond):
        self.make = make
        self.model = model
        self.year = year
        self.lkpyear = lkpyear
        self.lkpmonth = lkpmonth
        self.lkpday = lkpday
        self.lkphour = lkphour
        self.lkpminute = lkpminute
        self.lkpsecond = lkpsecond
 
class codelogs(db.Model):
    __tablename__ = 'codelogs'
    __table_args__ = {'extend_existing': True}
    id = db.Column('ID', db.Integer, primary_key=True)
    proveedor = db.Column('PROVEEDOR', db.String(80), nullable=False)
    parte = db.Column('PARTE', db.String(100), nullable=False)
    codigo = db.Column('CODIGO', db.String(80), nullable=False)
    lkpyear = db.Column('LKPYEAR',db.SmallInteger, nullable=False)
    lkpmonth = db.Column('LKPMONTH',db.SmallInteger, nullable=False)
    lkpday = db.Column('LKPDAY',db.SmallInteger, nullable=False)
    lkphour = db.Column('LKPHOUR',db.SmallInteger, nullable=False)
    lkpminute = db.Column('LKPMINUTE',db.SmallInteger, nullable=False)
    lkpsecond = db.Column('LKPSECOND',db.SmallInteger, nullable=False)
 
    def __init__(self, proveedor, parte, codigo, lkpyear, lkpmonth, lkpday, lkphour, lkpminute, lkpsecond):
        self.proveedor = proveedor
        self.parte = parte
        self.codigo = codigo
        self.lkpyear = lkpyear
        self.lkpmonth = lkpmonth
        self.lkpday = lkpday
        self.lkphour = lkphour
        self.lkpminute = lkpminute
        self.lkpsecond = lkpsecond
 
if __name__ == "__main__":
    # Run this file directly to create the database tables.
    print("Creating database tables...")
    db.create_all()
    print("Done!")

Al ejecutarlo en mi entorno virtual en el CMD me parece el siguiente error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(psavenv) C:\Users\conta\psadbs>python modellogs.py
Traceback (most recent call last):
  File "C:\Users\conta\eapsadbs\eapsavenv\Lib\site-packages\sqlalchemy\util\_collections.py", line 214, in __getattr__
    return self._data[key]
        ~~~~~~~~~~^^^^^
KeyError: 'lprecios'
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "C:\Users\conta\eapsadbs\modellogs.py", line 1, in <module>
    from app import db
  File "C:\Users\conta\eapsadbs\app.py", line 40, in <module>
    from sigaweb import updtPrices, backup_db_os, gen_lprecios, stats_charts
  File "C:\Users\conta\eapsadbs\sigaweb.py", line 15, in <module>
    import preciolista
  File "C:\Users\conta\eapsadbs\preciolista.py", line 16, in <module>
    lprecios = Base.classes.lprecios
                    ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\conta\psadbs\psavenv\Lib\site-packages\sqlalchemy\util\_collections.py", line 216, in __getattr__
    raise AttributeError(key)
AttributeError: lprecios

Lo cual no entiendo muy bien porque sucede, si verificando el código la definición de lprecios esta bien, así como su importación, aquí esta la parte del código donde dice estar el problema "preciolista.py":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from openpyxl import load_workbook, Workbook
from openpyxl.styles import Alignment, Border, Side, Font, Fill, Color, PatternFill
from sqlalchemy.orm import Session
from sqlalchemy.ext.automap import automap_base
from sqlalchemy import create_engine, MetaData
from dicts import todict
from operator import itemgetter
import datetime
import os
import sys
 
# MYSQL ORM
Base = automap_base()
enginedev = create_engine('mysql://root:psa@localhost/psa')
Base.prepare(enginedev, reflect=True)
lprecios = Base.classes.lprecios
sessiondev = Session(enginedev)
 
# FILEPATH TO SAVE FILES
FILEPATHFOLDER = 'lprecios/'

Y en caso de que me digan que si ya cree esa tabla en la base de datos, también se supone que "lprecios" se esta creando a partir del código, en especial en este script llamado "modelserv.py"

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
from app import db
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
class lprecios(db.Model):
    __tablename__ = 'lprecios'
    id = db.Column('ID', db.Integer, primary_key=True)
    tabla = db.Column('TABLA', db.String(30), nullable=False)
    parte = db.Column('PARTE', db.String(120), nullable=False)
    codigo = db.Column('CODIGO', db.String(25), nullable=False)
    codigosiga = db.Column('CODIGOSIGA', db.String(25), nullable=False)
    precio = db.Column('PRECIO', db.Float, nullable=False)
    cantidad = db.Column('CANTIDAD', db.Integer, nullable=False)
    __table_args__ = (db.Index('UI', codigo, codigosiga, unique=True), {
                      'extend_existing': True})
 
    def __init__(self, tabla, parte, codigo, codesiga, precio, cantidad):
        self.tabla = tabla
        self.parte = parte
        self.codigo = codigo
        self.codigosiga = codesiga
        self.precio = precio
        self.cantidad = cantidad
 
    def __str__(self):
        return 'Lista de Precios'

También ya me asegure que la dirección url de la base de datos fuera la misma en cada script en la que se le referenciaba ('mysql://root:psa@localhost/psa')
También me asegure de que las extensiones PIP que utilice fueran compatibles entre si (de hecho la mayoría de ellas son las ultimas versiones) les dejo la lista de las extensiones que utilice:

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
Package            Version
------------------ -----------
APScheduler        3.10.3
beautifulsoup4     4.12.2
blinker            1.6.2
certifi            2023.7.22
charset-normalizer 3.2.0
click              8.1.6
colorama           0.4.6
dnspython          2.4.2
email-validator    2.0.0.post2
et-xmlfile         1.1.0
Flask              2.3.2
Flask-APScheduler  1.12.4
Flask-Login        0.6.2
Flask-Mail         0.9.1
Flask-SQLAlchemy   3.0.5
Flask-WTF          1.1.1
greenlet           2.0.2
idna               3.4
itsdangerous       2.1.2
Jinja2             3.1.2
MarkupSafe         2.1.3
mysqlclient        2.1.1
numpy              1.25.2
openpyxl           3.1.2
packaging          23.1
pandas             2.0.3
pip                23.1.2
plotly             5.16.0
python-dateutil    2.8.2
pytz               2023.3
requests           2.31.0
setuptools         65.5.0
six                1.16.0
soupsieve          2.4.1
SQLAlchemy         2.0.20
tenacity           8.2.3
typing_extensions  4.7.1
tzdata             2023.3
tzlocal            5.0.1
urllib3            2.0.4
Werkzeug           2.3.7
wheel              0.41.1
WTForms            3.0.1

Así que de momento me encuentro sin ideas de lo que podría estar causando ese error, si alguien me podría ayudar a dar con el posible error le estaría muy muy agradecido.
De antemano muchas gracias por su atención.
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

Error al crear tablas desde código Python (SQLAlchemy)

Publicado por Leonardo (2 intervenciones) el 19/08/2023 22:01:45
Parece que ya lo resolví gracias.
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