
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:
Al ejecutarlo en mi entorno virtual en el CMD me parece el siguiente error:
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":
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"
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:
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.
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


0