Если вы полностью избавитесь от своего конструктора и измените вызов создания Budgets, он будет работать:
from sqlalchemy import create_engine, Column, Integer, Numeric, ForeignKey, String, Unicode
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
Base = declarative_base()
class Budgets(Base):
__tablename__ = 'budgets'
id = Column(Integer, primary_key=True)
userid = Column(String(20), nullable=False)
amount = Column(Numeric(19, 4), nullable=False)
engine = create_engine('sqlite:///budgetNew.db', echo=True)
#Base.metadata.create_all(bind=engine)
session = sessionmaker(bind=engine)
session = session()
budget1 = Budgets(userid='123234', amount=300)
session.add(budget1)
session.commit()
session.close()
Если вам по какой-то причине нужен переопределенный конструктор, вы можете сделать это:
class Budgets(Base):
# [...]
def __init__(self, *args, **kwargs):
super(Budgets, self).__init__(**kwargs)
self.userid = args[0]
self.amount = args[1]
# and then call
budget1 = Budgets('123234', 300)
Но даже в таком случае я бы предпочел придерживаться только ** kwargs и скорее сделать это, потому что это следует за привычками sqlalchemy:
def __init__(self, **kwargs):
super(Budgets, self).__init__(**kwargs)
# whatever else is needed
# and then call
budget1 = Budgets(userid='123234', amount=300)