Forums

Create dynamic tables

Hi guys, my app requires to create some extra tables at sign up, can i do this in pythonaanywhere or not?

This is the error i get when i try with my dynamic tables:

 sqlalchemy.exc.PendingRollbackError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (mysql.connector.errors.ProgrammingError) 1146 (42S02): Table 'Tanc$users.autocompletion_jvksrl' doesn't exist
2023-01-31 20:52:44,298: [SQL: INSERT INTO autocompletion_jvksrl (company_name, cui, email, trezo_name, cont_rc_436, cont_buget_stat, cont_constructii_rc_436, cont_tva) VALUES (%(company_name)s, %(cui)s, %(email)s, %(trezo_name)s, %(cont_rc_436)s, %(cont_buget_stat)s, %(cont_constructii_rc_436)s, %(cont_tva)s)]
2023-01-31 20:52:44,298: [parameters: {'company_name': 'Philips', 'cui': 'RO4123423', 'email': 'daniel_tanc@yahoo.com', 'trezo_name': 'Cluj', 'cont_rc_436': 'RO312312312312312', 'cont_buget_stat': 'RO42304023402304230', 'cont_constructii_rc_436': 'RO453290532495239', 'cont_tva': 'RO40234053204523'}]

This is my models.py:

login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = "login" login_manager.session_protection = "strong"

@login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))

class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) company_name = db.Column(db.String(100)) username = db.Column(db.String(100)) password = db.Column(db.String(100))

def __integer__(self):
    return self.id

def get_model_history(state): DynamicBase = declarative_base(class_registry=dict())

class MyModel(DynamicBase, db.Model, UserMixin):
    __tablename__ = 'history_{}'.format(state)

    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True)
    company_name = db.Column(db.VARCHAR(200), nullable=False)
    month = db.Column(db.VARCHAR(200), nullable=False)
    datetime_sent = db.Column(db.VARCHAR(200), nullable=False)
    sum_venituri = db.Column(db.VARCHAR(200), nullable=False)
    sum_cheltuieli = db.Column(db.VARCHAR(200), nullable=False)
    profit_luna = db.Column(db.VARCHAR(200), nullable=False)
    profit_an = db.Column(db.VARCHAR(200), nullable=False)
    sum_venituri_cifa_afaceri = db.Column(db.VARCHAR(200), nullable=False)
    scl = db.Column(db.VARCHAR(200), nullable=False)
    scv = db.Column(db.VARCHAR(200), nullable=False)
    sa = db.Column(db.VARCHAR(200), nullable=False)
    stc = db.Column(db.VARCHAR(200), nullable=False)
    tvadp = db.Column(db.VARCHAR(200), nullable=False)
    sumcontrbsal = db.Column(db.VARCHAR(200), nullable=False)
    ivp = db.Column(db.VARCHAR(200), nullable=False)
    totalpltstat = db.Column(db.VARCHAR(200), nullable=False)
    value_single_row_tva_rec = db.Column(db.VARCHAR(200), nullable=False)

return MyModel

def get_model_autocompletion(state): DynamicBase = declarative_base(class_registry=dict())

class MyModel(DynamicBase, db.Model, UserMixin):
    __tablename__ = 'autocompletion_{}'.format(state)

    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True)
    company_name = db.Column(db.VARCHAR(200), nullable=False)
    cui = db.Column(db.VARCHAR(200), nullable=False)
    email = db.Column(db.VARCHAR(200), nullable=False)
    trezo_name = db.Column(db.VARCHAR(200), nullable=False)
    cont_rc_436 = db.Column(db.VARCHAR(200), nullable=False)
    cont_buget_stat = db.Column(db.VARCHAR(200), nullable=False)
    cont_constructii_rc_436 = db.Column(db.VARCHAR(200), nullable=False)
    cont_tva = db.Column(db.VARCHAR(200), nullable=False)
return MyModel

On my localhost works great, it can be done or not? Thanks:)

You need to add some extra logging to your web app to see what is happening there. There is nothing that would prevent you from dynamically modifying your database schema on PythonAnywhere, so it looks like problem is in your code and/or database/orm configuration there.

Ok...but on my localhost works great..i dont get any error...i dont know what to debug.., and another q, i need to create folders or file dynamic for the users, and for that i get permission denied, i can't create files or folders?

Thank you and sorry for the troubles!

It looks like you may be trying to modify tables that don't exist (Tanc$users.autocompletion_jvksrl). Check your database to make sure that the tabels that you are trying to modify exist.