Skip to content

Commit 7a3b533

Browse files
committed
Cloned Flask-SQL Alchemy example.
1 parent a2fe926 commit 7a3b533

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed

examples/nameko_sqlalchemy/__init__.py

Whitespace-only changes.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.ext.declarative import declarative_base
3+
from sqlalchemy.orm import scoped_session, sessionmaker
4+
5+
engine = create_engine('sqlite:///database.sqlite3', convert_unicode=True)
6+
db_session = scoped_session(sessionmaker(autocommit=False,
7+
autoflush=False,
8+
bind=engine))
9+
Base = declarative_base()
10+
Base.query = db_session.query_property()
11+
12+
13+
def init_db():
14+
# import all modules here that might define models so that
15+
# they will be registered properly on the metadata. Otherwise
16+
# you will have to import them first before calling init_db()
17+
from models import Department, Employee, Role
18+
Base.metadata.drop_all(bind=engine)
19+
Base.metadata.create_all(bind=engine)
20+
21+
# Create the fixtures
22+
engineering = Department(name='Engineering')
23+
db_session.add(engineering)
24+
hr = Department(name='Human Resources')
25+
db_session.add(hr)
26+
27+
manager = Role(name='manager')
28+
db_session.add(manager)
29+
engineer = Role(name='engineer')
30+
db_session.add(engineer)
31+
32+
peter = Employee(name='Peter', department=engineering, role=engineer)
33+
db_session.add(peter)
34+
roy = Employee(name='Roy', department=engineering, role=engineer)
35+
db_session.add(roy)
36+
tracy = Employee(name='Tracy', department=hr, role=manager)
37+
db_session.add(tracy)
38+
db_session.commit()

examples/nameko_sqlalchemy/models.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, func
2+
from sqlalchemy.orm import backref, relationship
3+
4+
from database import Base
5+
6+
7+
class Department(Base):
8+
__tablename__ = 'department'
9+
id = Column(Integer, primary_key=True)
10+
name = Column(String)
11+
12+
13+
class Role(Base):
14+
__tablename__ = 'roles'
15+
role_id = Column(Integer, primary_key=True)
16+
name = Column(String)
17+
18+
19+
class Employee(Base):
20+
__tablename__ = 'employee'
21+
id = Column(Integer, primary_key=True)
22+
name = Column(String)
23+
# Use default=func.now() to set the default hiring time
24+
# of an Employee to be the current time when an
25+
# Employee record was created
26+
hired_on = Column(DateTime, default=func.now())
27+
department_id = Column(Integer, ForeignKey('department.id'))
28+
role_id = Column(Integer, ForeignKey('roles.role_id'))
29+
# Use cascade='delete,all' to propagate the deletion of a Department onto its Employees
30+
department = relationship(
31+
Department,
32+
backref=backref('employees',
33+
uselist=True,
34+
cascade='delete,all'))
35+
role = relationship(
36+
Role,
37+
backref=backref('roles',
38+
uselist=True,
39+
cascade='delete,all'))

examples/nameko_sqlalchemy/schema.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import graphene
2+
from graphene import relay
3+
from graphene_sqlalchemy import SQLAlchemyConnectionField, SQLAlchemyObjectType
4+
from models import Department as DepartmentModel
5+
from models import Employee as EmployeeModel
6+
from models import Role as RoleModel
7+
8+
9+
class Department(SQLAlchemyObjectType):
10+
11+
class Meta:
12+
model = DepartmentModel
13+
interfaces = (relay.Node, )
14+
15+
16+
class Employee(SQLAlchemyObjectType):
17+
18+
class Meta:
19+
model = EmployeeModel
20+
interfaces = (relay.Node, )
21+
22+
23+
class Role(SQLAlchemyObjectType):
24+
25+
class Meta:
26+
model = RoleModel
27+
interfaces = (relay.Node, )
28+
29+
30+
class Query(graphene.ObjectType):
31+
node = relay.Node.Field()
32+
all_employees = SQLAlchemyConnectionField(Employee)
33+
all_roles = SQLAlchemyConnectionField(Role)
34+
role = graphene.Field(Role)
35+
36+
37+
schema = graphene.Schema(query=Query, types=[Department, Employee, Role])

0 commit comments

Comments
 (0)