SlideShare ist ein Scribd-Unternehmen logo
1 von 113
Downloaden Sie, um offline zu lesen
More than SQL, but
Less than ORM
MoSQL (after v0.6)
Mosky
2
Mosky
I'm working at Pinkoi
2
Mosky
I'm working at Pinkoi
COSCUP staff
2
Mosky
I'm working at Pinkoi
COSCUP staff
Python trainer
2
Mosky
I'm working at Pinkoi
COSCUP staff
Python trainer
Speaker at COSCUP 2013, PyCon TW 2013,
PyCon JP 2012, PyCon TW 2012 ...
2
Mosky
I'm working at Pinkoi
COSCUP staff
Python trainer
Speaker at COSCUP 2013, PyCon TW 2013,
PyCon JP 2012, PyCon TW 2012 ...
http://mosky.tw/
2
Pinkoi.com	
  
Builds	
  Design	
  Ecosystem
for	
  people	
  to	
  BUY	
  /	
  SELL	
  /	
  SHARE	
  designs	
  and	
  to	
  be	
  INSPIRED.
Pinkoi.com	
  
Builds	
  Design	
  Ecosystem
Pinkoi	
  はアジアで最も大きいデザインショッピングウェブ
サイトです。優秀なデザイナー達がお客さんのためにいつ
もPinkoiで一番新しいデザインを提供しています。早めに
あなた達に会いたいですね。お楽しみ!
Outline
5
Outline
Why not SQL? But ...
5
Outline
Why not SQL? But ...
Why ORM? But ...
5
Outline
Why not SQL? But ...
Why ORM? But ...
MoSQL
5
Outline
Why not SQL? But ...
Why ORM? But ...
MoSQL
The Usage, Performance, and Security
5
Outline
Why not SQL? But ...
Why ORM? But ...
MoSQL
The Usage, Performance, and Security
Demo
5
Doc:
http://mosql.mosky.tw
Why not SQL?
Hard to Use
8
Hard to Use
SELECT * FROM article LIMIT 1;
8
Hard to Use
SELECT * FROM article LIMIT 1;
add ORDER BY created?
8
Hard to Use
SELECT * FROM article LIMIT 1;
add ORDER BY created?
add OFFSET 10?
8
Hard to Use
SELECT * FROM article LIMIT 1;
add ORDER BY created?
add OFFSET 10?
add GROUP BY author?
8
Hard to Use
SELECT * FROM article LIMIT 1;
add ORDER BY created?
add OFFSET 10?
add GROUP BY author?
UPDATE article WHERE title='SQL'
SET title='ORM'?
8
Hard to Use
9
Hard to Use
Programming Error
9
Hard to Use
Programming Error
Programming Error
9
Hard to Use
Programming Error
Programming Error
Programming Error
9
Hard to Use
Programming Error
Programming Error
Programming Error
!@#$
9
May Be Injected
10
May Be Injected
'WHERE ' + ' AND '.join(
"%s = '%s'" for k, v in inputs
)
10
May Be Injected
'WHERE ' + ' AND '.join(
"%s = '%s'" for k, v in inputs
)
Cracker can inject from value
10
May Be Injected
'WHERE ' + ' AND '.join(
"%s = '%s'" for k, v in inputs
)
Cracker can inject from value
or identifier, actually.
10
May Be Injected
'WHERE ' + ' AND '.join(
"%s = '%s'" for k, v in inputs
)
Cracker can inject from value
or identifier, actually.
DON'T copy the code here!
10
It seems bad! But ...
SQL ...
12
SQL ...
is fastest way to communicate with db,
12
SQL ...
is fastest way to communicate with db,
and everyone understands or learned it.
12
Why ORM?
Easy to Use
14
Easy to Use
class Person(Base):
__tablename__ = 'person'
person_id = Column(String, primary_key=True)
name = Column(String)
...
14
Easy to Use
15
Easy to Use
mosky = Person('mosky', 'Mosky Liu')
session.add(mosky)
15
Easy to Use
mosky = Person('mosky', 'Mosky Liu')
session.add(mosky)
for person in session.query(Person).all():
print person.name, person.person_id
15
Easy to Use
mosky = Person('mosky', 'Mosky Liu')
session.add(mosky)
for person in session.query(Person).all():
print person.name, person.person_id
Let you forget the ugly SQL so far.
15
SQL Injection Free
16
SQL Injection Free
Usually ORM guarantees it.
16
It seems good! But ...
ORM ...
18
ORM ...
is slower,
18
ORM ...
is slower,
and you need to learn it from scratch.
18
ORM ...
is slower,
and you need to learn it from scratch.
Sometimes it is just a black box.
18
SQL vs. ORM
SQL ORM
Easy-to-Use V
Secure V
Easy-to-Learn V
Fast V
So ... MoSQL
The First Glance
21
The First Glance
from mosql.query import select
print select('person')
21
The First Glance
from mosql.query import select
print select('person')
-> SELECT * FROM "person"
21
Map is just condition
22
Map is just condition
select('person', {
'person_id': 'mosky'
})
22
Map is just condition
select('person', {
'person_id': 'mosky'
})
-> SELECT * FROM "person"
WHERE "person_id" = 'mosky'
22
Sequence is just a list
23
Sequence is just a list
select('person',
select=('name', )
)
23
Sequence is just a list
select('person',
select=('name', )
)
-> SELECT "name" FROM "person"
23
Map is also a set-list
24
Map is also a set-list
insert('person', {
'person_id': 'mosky',
'name' : 'Mosky Liu'
})
24
Map is also a set-list
insert('person', {
'person_id': 'mosky',
'name' : 'Mosky Liu'
})
-> INSERT INTO
"person" ("person_id", "name")
VALUES ('mosky', 'Mosky Liu')
24
Order doesn't matter
25
Order doesn't matter
update('person',
where={'person_id': 'mosky'},
set ={'name' : 'Mosky Liu'},
})
25
Order doesn't matter
update('person',
where={'person_id': 'mosky'},
set ={'name' : 'Mosky Liu'},
})
-> UPDATE "person"
SET "name" = 'Mosky Liu'
WHERE "person_id" = 'mosky'
25
Operator also works!
26
Operator also works!
select('person', {
'age >=': 20
})
26
Operator also works!
select('person', {
'age >=': 20
})
-> SELECT * FROM "person"
WHERE "age" >= 20
26
All from
the native data structures!
The Overview
28
The Overview
insert(table, set, ...)
28
The Overview
insert(table, set, ...)
select(table, where, ...)
28
The Overview
insert(table, set, ...)
select(table, where, ...)
update(table, where, set, ...)
28
The Overview
insert(table, set, ...)
select(table, where, ...)
update(table, where, set, ...)
delete(table, where, ...)
28
The Overview
insert(table, set, ...)
select(table, where, ...)
update(table, where, set, ...)
delete(table, where, ...)
...
28
If you like it,
sudo pip install mosql
Join is also available
31
Join is also available
select(
    'person',
    {'person_id': 'mosky'},
    joins=left_join('detail',using=('person_id',))
)
31
Join is also available
select(
    'person',
    {'person_id': 'mosky'},
    joins=left_join('detail',using=('person_id',))
)
-> SELECT * FROM "person" LEFT JOIN "detail" USING
("person_id") WHERE "person_id" = 'mosky'
31
A Partial Query
32
A Partial Query
fixed_args = {'table': 'person'}
person_select = select.breed(fixed_args)
person_select()
32
A Partial Query
fixed_args = {'table': 'person'}
person_select = select.breed(fixed_args)
person_select()
-> SELECT * FROM "person"
32
A Partial Query
fixed_args = {'table': 'person'}
person_select = select.breed(fixed_args)
person_select()
-> SELECT * FROM "person"
select('person')
32
A Partial Query
fixed_args = {'table': 'person'}
person_select = select.breed(fixed_args)
person_select()
-> SELECT * FROM "person"
select('person')
-> SELECT * FROM "person"
32
Performance
33
Performance
About 4x faster than SQLAlchemy.
33
Performance
About 4x faster than SQLAlchemy.
Just a little bit slower than pure SQL.
33
Security
34
Security
Security by default.
34
Security
Security by default.
Use escaping technique.
34
Security
Security by default.
Use escaping technique.
Prevent SQL injection from both value and
identifier.
34
Security
Security by default.
Use escaping technique.
Prevent SQL injection from both value and
identifier.
Passed the tests from sqlmap at level=5 and
risk=3.
34
SQL vs. ORM
SQL ORM
Easy-to-Use V
Secure V
Easy-to-Learn V
Fast V
SQL < ______ < ORM
SQL ORM
Easy-to-Use V
Secure V
Easy-to-Learn V
Fast V
SQL < MoSQL < ORM
SQL MoSQL ORM
Easy-to-Use V V
Secure V V
Easy-to-Learn V V
Fast V V
Demo
Demo
39
Demo
Arbitrary Query with Web
39
Demo
Arbitrary Query with Web
Serious Usage using Class
39
Demo
Arbitrary Query with Web
Serious Usage using Class
All the code are in the Github!
39
The End
The End
41
The End
MoSQL is ...
41
The End
MoSQL is ...
Easy-to-Use
41
The End
MoSQL is ...
Easy-to-Use
Easy-to-Learn
41
The End
MoSQL is ...
Easy-to-Use
Easy-to-Learn
Secure
41
The End
MoSQL is ...
Easy-to-Use
Easy-to-Learn
Secure
Fast
41
The End
MoSQL is ...
Easy-to-Use
Easy-to-Learn
Secure
Fast
sudo pip install mosql
41
The End
MoSQL is ...
Easy-to-Use
Easy-to-Learn
Secure
Fast
sudo pip install mosql
http://mosql.mosky.tw/
41

Weitere ähnliche Inhalte

Was ist angesagt?

2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL
Hung-yu Lin
 
A comparison between C# and Java
A comparison between C# and JavaA comparison between C# and Java
A comparison between C# and Java
Ali MasudianPour
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
Damien Seguy
 
Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick tour
aztack
 

Was ist angesagt? (20)

2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL2014 database - course 3 - PHP and MySQL
2014 database - course 3 - PHP and MySQL
 
The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189
 
CBSE, Grade12, Computer Science, Random Numbers - Notes
CBSE, Grade12, Computer Science, Random Numbers - NotesCBSE, Grade12, Computer Science, Random Numbers - Notes
CBSE, Grade12, Computer Science, Random Numbers - Notes
 
Speeding up Red Team engagements with carnivorall
Speeding up Red Team engagements with carnivorallSpeeding up Red Team engagements with carnivorall
Speeding up Red Team engagements with carnivorall
 
A comparison between C# and Java
A comparison between C# and JavaA comparison between C# and Java
A comparison between C# and Java
 
Mongoose v3 :: The Future is Bright
Mongoose v3 :: The Future is BrightMongoose v3 :: The Future is Bright
Mongoose v3 :: The Future is Bright
 
R57.Php
R57.PhpR57.Php
R57.Php
 
Test du futur avec Spock
Test du futur avec SpockTest du futur avec Spock
Test du futur avec Spock
 
Nop2
Nop2Nop2
Nop2
 
Gg chat
Gg chatGg chat
Gg chat
 
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
 
JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!
 
Mgd08 lab01
Mgd08 lab01Mgd08 lab01
Mgd08 lab01
 
Removing structural duplication
Removing structural duplicationRemoving structural duplication
Removing structural duplication
 
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210
 
Python tutorial
Python tutorialPython tutorial
Python tutorial
 
Wwe Management System
Wwe Management SystemWwe Management System
Wwe Management System
 
Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick tour
 
Clean code
Clean codeClean code
Clean code
 

Ähnlich wie MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013

Mongodbinaction 100122230824-phpapp01
Mongodbinaction 100122230824-phpapp01Mongodbinaction 100122230824-phpapp01
Mongodbinaction 100122230824-phpapp01
Cevin Cheung
 
MongoDB Analytics
MongoDB AnalyticsMongoDB Analytics
MongoDB Analytics
datablend
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
Mike Fogus
 

Ähnlich wie MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013 (20)

Tokyo APAC Groundbreakers tour - The Complete Java Developer
Tokyo APAC Groundbreakers tour - The Complete Java DeveloperTokyo APAC Groundbreakers tour - The Complete Java Developer
Tokyo APAC Groundbreakers tour - The Complete Java Developer
 
Pandas+postgre sql 實作 with code
Pandas+postgre sql 實作 with codePandas+postgre sql 實作 with code
Pandas+postgre sql 實作 with code
 
The Ring programming language version 1.2 book - Part 79 of 84
The Ring programming language version 1.2 book - Part 79 of 84The Ring programming language version 1.2 book - Part 79 of 84
The Ring programming language version 1.2 book - Part 79 of 84
 
Mongodbinaction 100122230824-phpapp01
Mongodbinaction 100122230824-phpapp01Mongodbinaction 100122230824-phpapp01
Mongodbinaction 100122230824-phpapp01
 
MongoDB Analytics
MongoDB AnalyticsMongoDB Analytics
MongoDB Analytics
 
The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212
 
Virtual Machines
Virtual MachinesVirtual Machines
Virtual Machines
 
Mongo db for c# developers
Mongo db for c# developersMongo db for c# developers
Mongo db for c# developers
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
 
Mongo db basic installation
Mongo db basic installationMongo db basic installation
Mongo db basic installation
 
Web Security - Hands-on
Web Security - Hands-onWeb Security - Hands-on
Web Security - Hands-on
 
DConf 2016 std.database (a proposed interface & implementation)
DConf 2016 std.database (a proposed interface & implementation)DConf 2016 std.database (a proposed interface & implementation)
DConf 2016 std.database (a proposed interface & implementation)
 
Programming with Python and PostgreSQL
Programming with Python and PostgreSQLProgramming with Python and PostgreSQL
Programming with Python and PostgreSQL
 
MongoDB With Style
MongoDB With StyleMongoDB With Style
MongoDB With Style
 
The Ring programming language version 1.2 book - Part 19 of 84
The Ring programming language version 1.2 book - Part 19 of 84The Ring programming language version 1.2 book - Part 19 of 84
The Ring programming language version 1.2 book - Part 19 of 84
 
NDC London 2013 - Mongo db for c# developers
NDC London 2013 - Mongo db for c# developersNDC London 2013 - Mongo db for c# developers
NDC London 2013 - Mongo db for c# developers
 
Computer science project work on C++
Computer science project work on C++Computer science project work on C++
Computer science project work on C++
 
C language sample test
C language sample testC language sample test
C language sample test
 
MongoDB - Introduction
MongoDB - IntroductionMongoDB - Introduction
MongoDB - Introduction
 
MongoDb In Action
MongoDb In ActionMongoDb In Action
MongoDb In Action
 

Mehr von Mosky Liu

Mehr von Mosky Liu (18)

Statistical Regression With Python
Statistical Regression With PythonStatistical Regression With Python
Statistical Regression With Python
 
Practicing Python 3
Practicing Python 3Practicing Python 3
Practicing Python 3
 
Data Science With Python
Data Science With PythonData Science With Python
Data Science With Python
 
Hypothesis Testing With Python
Hypothesis Testing With PythonHypothesis Testing With Python
Hypothesis Testing With Python
 
Elegant concurrency
Elegant concurrencyElegant concurrency
Elegant concurrency
 
Boost Maintainability
Boost MaintainabilityBoost Maintainability
Boost Maintainability
 
Beyond the Style Guides
Beyond the Style GuidesBeyond the Style Guides
Beyond the Style Guides
 
Simple Belief - Mosky @ TEDxNTUST 2015
Simple Belief - Mosky @ TEDxNTUST 2015Simple Belief - Mosky @ TEDxNTUST 2015
Simple Belief - Mosky @ TEDxNTUST 2015
 
Concurrency in Python
Concurrency in PythonConcurrency in Python
Concurrency in Python
 
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
ZIPCodeTW: Find Taiwan ZIP Code by Address FuzzilyZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
ZIPCodeTW: Find Taiwan ZIP Code by Address Fuzzily
 
Graph-Tool in Practice
Graph-Tool in PracticeGraph-Tool in Practice
Graph-Tool in Practice
 
Minimal MVC in JavaScript
Minimal MVC in JavaScriptMinimal MVC in JavaScript
Minimal MVC in JavaScript
 
Learning Git with Workflows
Learning Git with WorkflowsLearning Git with Workflows
Learning Git with Workflows
 
Dive into Pinkoi 2013
Dive into Pinkoi 2013Dive into Pinkoi 2013
Dive into Pinkoi 2013
 
Learning Python from Data
Learning Python from DataLearning Python from Data
Learning Python from Data
 
Introduction to Clime
Introduction to ClimeIntroduction to Clime
Introduction to Clime
 
Programming with Python - Adv.
Programming with Python - Adv.Programming with Python - Adv.
Programming with Python - Adv.
 
Programming with Python - Basic
Programming with Python - BasicProgramming with Python - Basic
Programming with Python - Basic
 

Kürzlich hochgeladen

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 

Kürzlich hochgeladen (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013