In [36]:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, ForeignKey
from sqlalchemy.orm import sessionmaker, mapper

from sqlalchemy import create_engine
from sqlalchemy_utils import database_exists, create_database, drop_database

_url = 'sqlite:///database.db'

# cria o engine e o declarative_base
engine = create_engine(_url, echo=True)

Base = declarative_base(bind=engine)

class Endereco(Base):
    __tablename__ = 'enderecos'
    id = Column(Integer, primary_key=True)
    logradouro = Column(String(100), nullable=False)

    def __init__(self, logradouro):
        self.logradouro = logradouro

    def __str__(self):
        return self.nome

class Pessoa(Base):
    __tablename__ = 'pessoas'
    id = Column(Integer, primary_key=True)
    nome = Column(String(100), nullable=False)
    id_endereco = Column(Integer, ForeignKey('enderecos.id'), nullable=False)

    def __init__(self, nome, id_endereco):
        self.nome = nome
        self.id_endereco = id_endereco

    def __str__(self):
        return self.nome
    


if __name__ == '__main__':
    if database_exists(engine.url):
        Base.metadata.drop_all()
    #cria as tabelas no banco (caso nao existam)
    Base.metadata.create_all()


2017-10-16 21:07:52,000 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2017-10-16 21:07:52,002 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,004 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2017-10-16 21:07:52,006 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,008 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("enderecos")
2017-10-16 21:07:52,009 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,011 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("pessoas")
2017-10-16 21:07:52,012 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,015 INFO sqlalchemy.engine.base.Engine 
DROP TABLE pessoas
2017-10-16 21:07:52,017 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,025 INFO sqlalchemy.engine.base.Engine COMMIT
2017-10-16 21:07:52,027 INFO sqlalchemy.engine.base.Engine 
DROP TABLE enderecos
2017-10-16 21:07:52,029 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,036 INFO sqlalchemy.engine.base.Engine COMMIT
2017-10-16 21:07:52,038 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("enderecos")
2017-10-16 21:07:52,040 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,043 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("pessoas")
2017-10-16 21:07:52,045 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,046 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE enderecos (
	id INTEGER NOT NULL, 
	logradouro VARCHAR(100) NOT NULL, 
	PRIMARY KEY (id)
)


2017-10-16 21:07:52,048 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,056 INFO sqlalchemy.engine.base.Engine COMMIT
2017-10-16 21:07:52,058 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE pessoas (
	id INTEGER NOT NULL, 
	nome VARCHAR(100) NOT NULL, 
	id_endereco INTEGER NOT NULL, 
	PRIMARY KEY (id), 
	FOREIGN KEY(id_endereco) REFERENCES enderecos (id)
)


2017-10-16 21:07:52,061 INFO sqlalchemy.engine.base.Engine ()
2017-10-16 21:07:52,069 INFO sqlalchemy.engine.base.Engine COMMIT

In [37]:
# configure Session class with desired options
Session = sessionmaker()
Session.configure(bind=engine)

session = Session()

In [38]:
e = Endereco('Rua XXX')
session.add(e)
session.commit()


2017-10-16 21:07:56,728 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-10-16 21:07:56,730 INFO sqlalchemy.engine.base.Engine INSERT INTO enderecos (logradouro) VALUES (?)
2017-10-16 21:07:56,732 INFO sqlalchemy.engine.base.Engine ('Rua XXX',)
2017-10-16 21:07:56,735 INFO sqlalchemy.engine.base.Engine COMMIT

In [39]:
e.id


2017-10-16 21:07:57,217 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-10-16 21:07:57,219 INFO sqlalchemy.engine.base.Engine SELECT enderecos.id AS enderecos_id, enderecos.logradouro AS enderecos_logradouro 
FROM enderecos 
WHERE enderecos.id = ?
2017-10-16 21:07:57,220 INFO sqlalchemy.engine.base.Engine (1,)
Out[39]:
1

In [40]:
p = Pessoa('Fulano', e.id)

In [41]:
session.add(p)

In [42]:
session.commit()


2017-10-16 21:08:21,636 INFO sqlalchemy.engine.base.Engine INSERT INTO pessoas (nome, id_endereco) VALUES (?, ?)
2017-10-16 21:08:21,638 INFO sqlalchemy.engine.base.Engine ('Fulano', 1)
2017-10-16 21:08:21,642 INFO sqlalchemy.engine.base.Engine COMMIT

In [43]:
p.id_endereco


2017-10-16 21:09:14,343 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-10-16 21:09:14,345 INFO sqlalchemy.engine.base.Engine SELECT pessoas.id AS pessoas_id, pessoas.nome AS pessoas_nome, pessoas.id_endereco AS pessoas_id_endereco 
FROM pessoas 
WHERE pessoas.id = ?
2017-10-16 21:09:14,347 INFO sqlalchemy.engine.base.Engine (1,)
Out[43]:
1

In [ ]: