SlideShare a Scribd company logo

Flask-SQLAlchemy
Eueung Mulyana
http://eueung.github.io/python/flask-sqlalchemy
Python CodeLabs | Attribution-ShareAlike CC BY-SA
1 / 20

Basics #1, #2
Relationships #3, #4, #5
Declarative (ORM) #6
Manual OR Mapping #7
SQL Abstraction Layer #8
2 / 20
Basics
 
3 / 20
Example #1
fromflaskimportFlask
fromflask.ext.sqlalchemyimportSQLAlchemy
#------------------------------------------
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db=SQLAlchemy(app)
#------------------------------------------
classUser(db.Model):
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(80),unique=True)
email=db.Column(db.String(120),unique=True)
def__init__(self,username,email):
self.username=username
self.email=email
def__repr__(self):
return'<User%r>'%self.username
db.create_all()
admin=User('admin','admin@example.com')
guest=User('guest','guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
users=User.query.all()
printusers
admin=User.query.filter_by(username='admin').first()
printadmin
[<Useru'admin'>,<Useru'guest'>]
<Useru'admin'>
unicode('abcdef')-> u'abcdef'
u'helloworld'.encode('utf-8')or
str(u'helloworld')
4 / 20
Example #2
3
1
admin@example.com
True
[<Useru'admin'>,<Useru'guest'>]
[<Useru'admin'>,<Useru'guest'>]
[<Useru'admin'>,<Useru'guest'>]
[<Useru'admin'>]
<Useru'admin'>
This will raise 404 errors instead of returning None:
get_or_404()or first_or_404()(for view
functions)
db.create_all()
admin=User('admin','admin@example.com')
guest=User('guest','guest@example.com')
me=User('me','me@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.add(me)
db.session.commit()
printme.id#aftercommit
db.session.delete(me)
db.session.commit()
admin=User.query.filter_by(username='admin').first()
printadmin.id
printadmin.email
missing=User.query.filter_by(username='missing').first()
printmissingisNone
printUser.query.all()
printUser.query.filter(User.email.endswith('@example.com')).a
printUser.query.order_by(User.username).all()
printUser.query.limit(1).all()#1user
printUser.query.get(1)#byprimarykey
5 / 20
Relationships
 
6 / 20
fromflaskimportFlask
fromflask.ext.sqlalchemyimportSQLAlchemy
#------------------------------------------
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db=SQLAlchemy(app)
#------------------------------------------
classPerson(db.Model):
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(50))
addresses=db.relationship('Address',backref='person',lazy=
def__init__(self,name):
self.name=name
def__repr__(self):
return'<Person%r>'%self.name
classAddress(db.Model):
id=db.Column(db.Integer,primary_key=True)
email=db.Column(db.String(120),unique=True)
person_id=db.Column(db.Integer,db.ForeignKey('person.id'
#person=db.relationship('Person',backref=db.backref('addresses',lazy='dynamic'))
def__init__(self,email,pers):
self.email=email
self.person_id=pers.id
def__repr__(self):
return'<Address%r>'%self.email
Example #3
How does it know that this will return more than one
address? Because SQLAlchemy guesses a useful default
from your declaration.
If you would want to have a one-to-one relationship you
can pass uselist=Falseto relationship().
Two possibilities (TBT)
See: Declaring Models
7 / 20
Example #3
[<Addressu'otong@example.com'>,<Addressu'otong@nasa.com'
<Addressu'otong@example.com'>
[<Addressu'ujang@example.com'>]
<Personu'otong'>
db.create_all()
otong=Person('otong')
ujang=Person('ujang')
db.session.add(otong)
db.session.add(ujang)
db.session.commit()
otongemail1=Address('otong@example.com',otong)
otongemail2=Address('otong@nasa.com',otong)
ujangemail=Address('ujang@example.com',ujang)
db.session.add(otongemail1)
db.session.add(otongemail2)
db.session.add(ujangemail)
db.session.commit()
printotong.addresses.all()
printotong.addresses.first()
printujang.addresses.all()
printotongemail1.person
8 / 20
Example #4
Page.tags : a list of tags once loaded
Tag.pages : a dynamic backref
Declaring Models — Flask-SQLAlchemy Documentation
Many to Many Relationships with Flask-SQLALchemy
Basic Relationship Patterns — SQLAlchemy
fromflaskimportFlask
fromflask.ext.sqlalchemyimportSQLAlchemy
#------------------------------------------
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db=SQLAlchemy(app)
#------------------------------------------
tags=db.Table('tags',
db.Column('tag_id',db.Integer,db.ForeignKey('tag.id')),
db.Column('page_id',db.Integer,db.ForeignKey('page.id'
)
classPage(db.Model):
id=db.Column(db.Integer,primary_key=True)
title=db.Column(db.String(80))
body=db.Column(db.Text)
tags=db.relationship('Tag',secondary=tags,backref=db.b
def__init__(self,title):
self.title=title
def__repr__(self):
return'<Page%r>'%self.title
classTag(db.Model):
id=db.Column(db.Integer,primary_key=True)
label=db.Column(db.String(50))
def__init__(self,label):
self.label=label
def__repr__(self):
return'<Tag%r>'%self.label
9 / 20
db.create_all()
tagpython=Tag('python')
tagtuts=Tag('tutorial')
tagjava=Tag('java')
db.session.add(tagpython)
db.session.add(tagjava)
db.session.add(tagtuts)
#db.session.commit()
pagepython1=Page('pagepython1')
pagepython2=Page('pagepython2')
pagejava=Page('pagejava')
db.session.add(pagepython1)
db.session.add(pagepython2)
db.session.add(pagejava)
#db.session.commit()
pagepython1.tags.append(tagpython)
pagepython1.tags.append(tagtuts)
pagepython2.tags.append(tagpython)
pagejava.tags.append(tagjava)
db.session.commit()
printtagpython.pages.all()
printpagepython1.tags
Example #4
[<Pageu'pagepython1'>,<Pageu'pagepython2'>]
[<Tagu'tutorial'>,<Tagu'python'>]
10 / 20
Example #5
fromdatetimeimportdatetime
fromflaskimportFlask
fromflask.ext.sqlalchemyimportSQLAlchemy
#------------------------------------------
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db=SQLAlchemy(app)
#------------------------------------------
classPost(db.Model):
id=db.Column(db.Integer,primary_key=True)
title=db.Column(db.String(80))
body=db.Column(db.Text)
pub_date=db.Column(db.DateTime)
category_id=db.Column(db.Integer,db.ForeignKey('category.id'
category=db.relationship('Category',backref=db.backref(
def__init__(self,title,body,category,pub_date=None)
self.title=title
self.body=body
ifpub_dateisNone:
pub_date=datetime.utcnow()
self.pub_date=pub_date
self.category=category
def__repr__(self):
return'<Post%r>'%self.title
classCategory(db.Model):
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(50))
def__init__(self,name):
self.name=name
def__repr__(self):
return'<Category%r>'%self.name
#------------------------------------------
db.create_all()
py=Category('Python')
p=Post('HelloPython!','Pythonisprettycool',py)
db.session.add(py)
db.session.add(p)
db.session.commit()#journal?
printpy.posts
printpy.posts.all()
SELECTpost.idASpost_id,post.titleASpost_title,post.body
[<Postu'HelloPython!'>]
11 / 20
Declarative
 
12 / 20
Example #6
database.py
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportscoped_session,sessionmaker
fromsqlalchemy.ext.declarativeimportdeclarative_base
#------------------------------------------
engine=create_engine('sqlite:///test.db',convert_unicode=
db_session=scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base=declarative_base()
Base.query=db_session.query_property()
#------------------------------------------
definit_db():
importmodels
Base.metadata.create_all(bind=engine)
models.py
fromsqlalchemyimportColumn,Integer,String
fromdatabaseimportBase
#------------------------------------------
classUser(Base):
__tablename__='users'
id=Column(Integer,primary_key=True)
name=Column(String(50),unique=True)
email=Column(String(120),unique=True)
def__init__(self,name=None,email=None):
self.name=name
self.email=email
def__repr__(self):
return'<User%r>'%(self.name)
13 / 20
Example #6
[<Useru'admin'>]
<Useru'admin'>
app.py
fromdatabaseimportdb_session,init_db
frommodelsimportUser
fromflaskimportFlask
#------------------------------------------
app=Flask(__name__)
#------------------------------------------
@app.teardown_appcontext
defshutdown_session(exception=None):
db_session.remove()
#------------------------------------------
init_db()
u=User('admin','admin@localhost')
db_session.add(u)
db_session.commit()
printUser.query.all()
printUser.query.filter(User.name=='admin').first()
14 / 20
Manual Object Relational Mapping
 
15 / 20
Example #7
database.py
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportscoped_session,sessionmaker
#fromsqlalchemy.ext.declarativeimportdeclarative_base
fromsqlalchemyimportMetaData
#------------------------------------------
engine=create_engine('sqlite:///test.db',convert_unicode=
db_session=scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
metadata=MetaData()
#Base=declarative_base()
#Base.query=db_session.query_property()
#------------------------------------------
definit_db():
#importmodels
#Base.metadata.create_all(bind=engine)
metadata.create_all(bind=engine)
models.py
fromsqlalchemyimportColumn,Integer,String
#fromdatabaseimportBase
fromsqlalchemyimportTable
fromsqlalchemy.ormimportmapper
fromdatabaseimportmetadata,db_session
#------------------------------------------
#classUser(Base):
classUser(object):
#__tablename__='users'
#id=Column(Integer,primary_key=True)
#name=Column(String(50),unique=True)
#email=Column(String(120),unique=True)
query=db_session.query_property()
def__init__(self,name=None,email=None):
self.name=name
self.email=email
def__repr__(self):
return'<User%r>'%(self.name)
#------------------------------------------
users=Table('users',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(50),unique=True),
Column('email',String(120),unique=True)
)
mapper(User,users)
16 / 20
SQL Abstraction Layer
 
17 / 20
fromsqlalchemyimportcreate_engine,MetaData
fromsqlalchemyimportTable,Column,Integer,String
engine=create_engine('sqlite:///test.db',convert_unicode=
metadata=MetaData(bind=engine)
users=Table('users',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(50),unique=True),
Column('email',String(120),unique=True)
)
metadata.create_all(bind=engine)
#users=Table('users',metadata,autoload=True)
#ifpreviouslyexists
con=engine.connect()
con.execute(users.insert(),name='admin',email='admin@localhost'
#SQLAlchemywillautomaticallycommitforus.
printusers.select(users.c.id==1).execute().first()
r=users.select(users.c.id==1).execute().first()
print r['name']
printengine.execute('select*fromuserswhereid=:1',[1
Example #8
(1,u'admin',u'admin@localhost')
admin
(1,u'admin',u'admin@localhost')
18 / 20
References
Flask-SQLAlchemy Documentation
SQLAlchemy Documentation
Patterns for Flask - Flask Documentation
Patterns - SQLAlchemy in Flask
19 / 20

END
Eueung Mulyana
http://eueung.github.io/python/flask-sqlalchemy
Python CodeLabs | Attribution-ShareAlike CC BY-SA
20 / 20

More Related Content

PDF
Rest API using Flask & SqlAlchemy
PDF
Flask RESTful Flask HTTPAuth
PDF
Flask Basics
PDF
Flask patterns
PPTX
Flask – Python
PDF
Kyiv.py #17 Flask talk
PDF
Filling the flask
PDF
Flask - Backend com Python - Semcomp 18
Rest API using Flask & SqlAlchemy
Flask RESTful Flask HTTPAuth
Flask Basics
Flask patterns
Flask – Python
Kyiv.py #17 Flask talk
Filling the flask
Flask - Backend com Python - Semcomp 18

What's hot (20)

PPTX
Build restful ap is with python and flask
PDF
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
KEY
LvivPy - Flask in details
PDF
Flask Introduction - Python Meetup
PPT
Learn flask in 90mins
ODP
Developing Drizzle Replication Plugins
PDF
関西PHP勉強会 php5.4つまみぐい
PDF
Continuous Quality Assurance
PDF
Getting Started-with-Laravel
PDF
New PHP Exploitation Techniques
PPT
Red5 - PHUG Workshops
PDF
Python RESTful webservices with Python: Flask and Django solutions
PDF
Diseño y Desarrollo de APIs
KEY
SQLite Techniques
PDF
Apigility reloaded
PDF
The Enterprise Wor/d/thy/Press
PDF
WordPress REST API hacking
PPTX
PDF
Ten common mistakes made in Function Java
ODP
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Build restful ap is with python and flask
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
LvivPy - Flask in details
Flask Introduction - Python Meetup
Learn flask in 90mins
Developing Drizzle Replication Plugins
関西PHP勉強会 php5.4つまみぐい
Continuous Quality Assurance
Getting Started-with-Laravel
New PHP Exploitation Techniques
Red5 - PHUG Workshops
Python RESTful webservices with Python: Flask and Django solutions
Diseño y Desarrollo de APIs
SQLite Techniques
Apigility reloaded
The Enterprise Wor/d/thy/Press
WordPress REST API hacking
Ten common mistakes made in Function Java
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Ad

Viewers also liked (8)

PDF
Rest in flask
PPTX
webアプリケーションフレームワークの話
PPTX
Webアプリケーションフレームワーク flask
PDF
Flask入門
PDF
Flask勉強会その1
PDF
Quick flask an intro to flask
PDF
Rest in flask
PDF
Developing RESTful Web APIs with Python, Flask and MongoDB
Rest in flask
webアプリケーションフレームワークの話
Webアプリケーションフレームワーク flask
Flask入門
Flask勉強会その1
Quick flask an intro to flask
Rest in flask
Developing RESTful Web APIs with Python, Flask and MongoDB
Ad

Similar to Flask SQLAlchemy (15)

PPTX
Django - sql alchemy - jquery
PDF
Flask 소수전공 강의자료 - 3차시
PDF
Introduction to SQLAlchemy ORM
PPTX
Flask Application ppt to understand the flask
PDF
PyCon 2010 SQLAlchemy tutorial
PDF
SQLAlchemy Core: An Introduction
PDF
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
PDF
Python sqlite3 - flask
PDF
Slides python elixir
PDF
Using web2py's DAL in other projects or frameworks
PDF
SQLAlchemy Seminar
ODP
An introduction to SQLAlchemy
PDF
Python BCN Introduction to SQLAlchemy
PDF
Sq lite python tutorial sqlite programming in python
PDF
Introduction to Flask Micro Framework
Django - sql alchemy - jquery
Flask 소수전공 강의자료 - 3차시
Introduction to SQLAlchemy ORM
Flask Application ppt to understand the flask
PyCon 2010 SQLAlchemy tutorial
SQLAlchemy Core: An Introduction
파이썬 플라스크로 배우는 웹프로그래밍 #4 (ABCD)
Python sqlite3 - flask
Slides python elixir
Using web2py's DAL in other projects or frameworks
SQLAlchemy Seminar
An introduction to SQLAlchemy
Python BCN Introduction to SQLAlchemy
Sq lite python tutorial sqlite programming in python
Introduction to Flask Micro Framework

More from Eueung Mulyana (20)

PDF
FGD Big Data
PDF
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
PDF
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
PDF
Blockchain Introduction
PDF
Bringing Automation to the Classroom: A ChatOps-Based Approach
PDF
FinTech & Cryptocurrency Introduction
PDF
Open Source Networking Overview
PDF
ONOS SDN Controller - Clustering Tests & Experiments
PDF
Open stack pike-devstack-tutorial
PDF
Basic onos-tutorial
PDF
ONOS SDN Controller - Introduction
PDF
OpenDaylight SDN Controller - Introduction
PDF
Mininet Basics
PDF
Android Programming Basics
PDF
Cloud Computing: Overview and Examples
PDF
selected input/output - sensors and actuators
PDF
Connected Things, IoT and 5G
PDF
Connectivity for Local Sensors and Actuators Using nRF24L01+
PDF
NodeMCU with Blynk and Firebase
PDF
Trends and Enablers - Connected Services and Cloud Computing
FGD Big Data
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Blockchain Introduction
Bringing Automation to the Classroom: A ChatOps-Based Approach
FinTech & Cryptocurrency Introduction
Open Source Networking Overview
ONOS SDN Controller - Clustering Tests & Experiments
Open stack pike-devstack-tutorial
Basic onos-tutorial
ONOS SDN Controller - Introduction
OpenDaylight SDN Controller - Introduction
Mininet Basics
Android Programming Basics
Cloud Computing: Overview and Examples
selected input/output - sensors and actuators
Connected Things, IoT and 5G
Connectivity for Local Sensors and Actuators Using nRF24L01+
NodeMCU with Blynk and Firebase
Trends and Enablers - Connected Services and Cloud Computing

Recently uploaded (20)

PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PDF
Triggering QUIC, presented by Geoff Huston at IETF 123
PPTX
Internet___Basics___Styled_ presentation
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPTX
SAP Ariba Sourcing PPT for learning material
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PPTX
innovation process that make everything different.pptx
PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
DOCX
Unit-3 cyber security network security of internet system
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
PPT
tcp ip networks nd ip layering assotred slides
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PPTX
international classification of diseases ICD-10 review PPT.pptx
PDF
RPKI Status Update, presented by Makito Lay at IDNOG 10
PDF
WebRTC in SignalWire - troubleshooting media negotiation
PPTX
522797556-Unit-2-Temperature-measurement-1-1.pptx
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PptxGenJS_Demo_Chart_20250317130215833.pptx
Unit-1 introduction to cyber security discuss about how to secure a system
Triggering QUIC, presented by Geoff Huston at IETF 123
Internet___Basics___Styled_ presentation
Design_with_Watersergyerge45hrbgre4top (1).ppt
SAP Ariba Sourcing PPT for learning material
An introduction to the IFRS (ISSB) Stndards.pdf
innovation process that make everything different.pptx
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
Unit-3 cyber security network security of internet system
Slides PDF The World Game (s) Eco Economic Epochs.pdf
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
tcp ip networks nd ip layering assotred slides
Module 1 - Cyber Law and Ethics 101.pptx
international classification of diseases ICD-10 review PPT.pptx
RPKI Status Update, presented by Makito Lay at IDNOG 10
WebRTC in SignalWire - troubleshooting media negotiation
522797556-Unit-2-Temperature-measurement-1-1.pptx
INTERNET------BASICS-------UPDATED PPT PRESENTATION

Flask SQLAlchemy