Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parÉloïse Leduc Modifié depuis plus de 8 années
1
Oubliez SQL avec SQLAlchemy Pycon.fr 2009 Michael Scherer
2
Origine Ordinateur : Appareil électronique capable [...] d’effectuer des traitements automatisés de données
3
Stockage ? ● XML ● Structure binaire ● Json ● Fichiers et répertoire ● Objets
4
SQL ● Très utilisé dans le monde ● Gestion de données par table ● Schéma de description des données
5
SQL et Python PEP 0249
6
Problème de SQL
7
Standard ? Un champ avec un auto incrément
8
Mysql CREATE TABLE animals ( id INT NOT NULL AUTO_INCREMENT, name TEXT, PRIMARY KEY (id) );
9
SQLite CREATE TABLE animals( id INTEGER PRIMARY KEY, name TEXT );
10
Postgresql CREATE TABLE animals( id SERIAL, name TEXT );
11
Oracle, Firebird, MS-SQL, etc
12
SQL Différences dans les types
13
SQL Différences dans les fonctions
14
ORM Object Relational Mapper
15
Avantages Ne pas avoir à connaitre SQL
16
Avantages Couche d'abstraction
17
Avantages Portabilité entre les divers SGBD
18
Avantages Portabilité entre les différentes versions d'un SGDB
19
Avantages Gestion de plus haut niveau
20
Avantages Protection contre les attaques de type SQL injection
21
Exemples d'ORM Active Record ( Ruby ) Class::DBIx ( Perl ) Hibernate ( Java )
22
Exemples d'ORM python Storm L'orm de Django SQL Object SQL Alchemy
24
En vrac ● Version 0.5.4 ● Date de 2006 ● Licence MIT ● 75 000 lignes de code python
25
Utilisé par ● Trac ● Pagoda ●.... ● Reddit.com ● Virgin Charter
26
Support des SGBDs ● SQLite ● MySQL ● PostgreSQL ● Oracle ● Firebird ● MS-SQL ●...
27
Problèmes des ORMs
28
Cache la base de données
29
Faux ● Accès direct possible via la requête de son choix ● Possibilité de voir le SQL généré à l'utilisation
30
Force l'usage d'un dénominateur commun
31
Faux ● Utilisation de types spécifiques possible ● PgInet ● MSBigInteger ● Ajout de types personnalisés
32
Mauvais pour les performances
33
Faux ● Chargement paresseux ( lazy loading ) ● Chargement avide ( eager load ) ● Possibilité d'utiliser sa propre requête SQL optimisé ● Génération de SQL via un moteur d'optimisation ● Utilisation d'un pool de requêtes
34
If all you have is a hammer everything starts to look like a nail
35
Guide rapide
36
Déclarer la base from sqlalchemy import create_engine engine = create_engine( 'sqlite:///:memory:' )
37
Déclarer les tables metadata = MetaData() animals = Table('animals', metadata, Column('id', Integer, primary_key = True), Column('name', String(30), nullable = False), )
38
Création des tables metadata.create_all(engine)
39
Creation des classes class Animal(object): def __init__(self, name): self.name = name def __repr__(self): return " " % self.name
40
Lien entre table et objet from sqlalchemy.orm import mapper mapper(animals, Animal)
41
Connexion à la base from sqlalchemy.orm import sessionmaker session = sessionmaker(bind=engine)
42
Ajout d'un objet castor = animal('Victor') session.add(castor) # envoi vers la base session.commit()
43
Requêtes
44
Utilisation de Query >>> for a in session.query(Animal):... print a.name Victor
45
Filtrage >>> session.query(Animal).filter( Animal.name.like('V%')).first() Victor
46
Filtrage Utilisation proche de Python ● Slices -> LIMIT OFFSET ● Possibilités de chainer les filtres comme des appels de fonctions
47
Trucs avancés
48
Utilisation de pickle Stockage d'objet python directement dans la base
49
Héritage Formalise l'héritage dans la base
50
Système de cache Possibilité de s'insérer dans le moteur de requêtes
51
Sharding Répartition des données sur plusieurs bases
52
Migrate Gestion des changements de schémas
53
Elixir Couche déclarative au dessus de SQLAlchemy
54
elixir.ext.versionned Gestion automatique de version des objets
55
elixir.ext.list Simule une structure de liste
56
elixir.ext.encrypted Chiffrage à la volée des entrées
57
?
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.