Fetch Addresses from the database¶
Persisted Address instances¶
Reahl provides glue so you can persist Addresses in a database using SqlAlchemy:
Use the SqlAlchemy
Session
andBase
provided bysqlalchemysupport
.__tablename__ identifies the table Address instances go into;
The Columns map similarly named attributes to database columns;
The id Column is the primary key for Addresses;
Persist an Address instance with Session.add().
from reahl.sqlalchemysupport import Session, Base
from sqlalchemy import Column, Integer, UnicodeText
class Address(Base):
__tablename__ = 'addressbook1_address'
id = Column(Integer, primary_key=True)
email_address = Column(UnicodeText)
name = Column(UnicodeText)
def save(self):
Session.add(self)
Change AddressBookPanel to query the database¶
class AddressBookPanel(Div):
def __init__(self, view):
super().__init__(view)
self.add_child(H(view, 1, text='Addresses'))
for address in Session.query(Address).all():
self.add_child(AddressBox(view, address))
Register Address with setup.cfg¶
Reahl needs to know about persisted classes so it can (for example):
create database tables
migrate older databases to newer schemas
Register Address in your project by adding it to the the “persisted” list in setup.cfg:
component =
persisted = [
"reahl.doc.examples.tutorial.addressbook1.addressbook1:Address"
]
Housekeeping and your database schema¶
Whenever you change a setup.cfg file though, be sure to run:
python -m pip install --no-deps -e .
To create a database, run:
reahl createdbuser etc # If you have not already
reahl createdb etc
reahl createdbtables etc
More useful commands:
reahl dropdb etc
reahl dropdbtables etc
Configuration¶
Wonder where the database is? Check applicable config settings with:
reahl listconfig etc -i
To see the actual current values of those:
reahl listconfig etc -v