Reputation: 1132
I have this code which adds a 'user' with the assigned attributes and later searches for it. But get_row() which uses filter_by always returns None.
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
email = Column('email', String(40), primary_key=True)
name = Column('name', String(40))
password = Column('password', String)
plan = Column('plan', String)
apikey = Column('apikey', String)
periodstart = Column('periodstart', Integer)
confirmed = Column('confirmed', Integer)
billed = Column('billed', Integer)
class SQLDb:
def __init__(self, model):
self.model = model
uri = 'sqlite:///:memory:'
self.engine = create_engine(uri, echo=True)
Session = sessionmaker(bind=self.engine)
self.session = Session()
Base.metadata.create_all(self.engine)
def __enter__(self):
return self.session
def modify_row(self, r):
self.session.add(r)
self.session.commit()
def get_row(self, **kwargs):
self.session.query(self.model).filter_by(**kwargs).first()
def closedb(self):
self.session.commit()
def __exit__(self, a, b, c):
self.closedb()
if __name__ == "__main__":
user = User()
user.email = '[email protected]'
user.name = 'john'
user.password = 'test@123'
user.plan = 'dummy'
user.periodstart = 0
user.confirmed = 0
user.billed = 1
sdb = SQLDb(User)
sdb.modify_row(user)
print(sdb.get_row(name='john'))
Output is always: None
I don't understand what is going wrong here. Can you please explain?
Upvotes: 1
Views: 2387
Reputation: 3777
You just need to return the result from the function. Otherwise it returns None
.
def get_row(self, **kwargs):
return self.session.query(self.model).filter_by(**kwargs).first()
Upvotes: 3