Database
 sql >> Base de données >  >> RDS >> Database

Comment exécuter du SQL brut dans SQLAlchemy

SQLAlchemy est un outil SQL construit avec Python qui offre aux développeurs une multitude de fonctionnalités puissantes pour concevoir et gérer des bases de données hautes performances.

Nous allons brièvement explorer comment utiliser SQLAlchemy, puis approfondir la façon d'exécuter des instructions SQL brutes dans le confort du langage de domaine Python.

Utiliser SQLAlchemy

Comme pour toutes les bibliothèques Python, commencez par installer SQLAlchemy. Une fois installé, nous pouvons commencer à nous amuser en Python.

Ensuite, importez sqlalchemy lui-même, puis importez quelques modules afin que nous puissions facilement accéder au moteur de base de données SQLAlchemy :

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy import inspect

En plus de create_engine , nous importons également un certain nombre de modules supplémentaires dont nous aurons besoin pour créer une nouvelle table. Avant d'en arriver là, assurez-vous que SQLAlchemy a été installé, importé et fonctionne en appelant .__version__ comme ça :

print sqlalchemy.__version__
Out[*]: 1.0.9

Créer un tableau

Nous utiliserons la fonctionnalité de base de SQLAlchemy qui est le langage d'expression SQL pour créer des metadata qui contiendra un certain nombre de modules (ou objets) associés qui définissent notre nouveau book table de base de données :

metadata = MetaData()
books = Table('book', metadata,
  Column('id', Integer, primary_key=True),
  Column('title', String),
  Column('primary_author', String),
)

engine = create_engine('sqlite:///bookstore.db')
metadata.create_all(engine)

En haut, nous définissons metadata , puis nous le passons dans le Table() méthode, où nous donnons à notre table le nom book . Dans ce cadre, nous définissons chaque colonne, ainsi que des attributs importants tels que le type de données et primary_key .

Une fois nos tables définies et associées à nos metadata objet, nous devons créer un moteur de base de données avec lequel nous pouvons nous connecter. Ceci est accompli en utilisant le create_engine fonction.

engine = create_engine('sqlite:///bookstore.db')

Pour notre exemple, nous utiliserons un simple SQLite base de données. Vous pouvez également utiliser des chaînes de connexion pour d'autres moteurs tels que MySQL ou PostgreSQL. Voici un exemple de syntaxe pour créer un moteur pour PostgreSQL :

engine = create_engine('postgresql://user:password@host/database')

Avec le moteur créé, nous devons maintenant utiliser le .create_all() méthode de nos metadata objet et passer le engine connexion à celui-ci, ce qui entraînera automatiquement SQLAlchemy à générer notre table pour nous, comme indiqué ci-dessus.

Une fois cela terminé, nous pouvons utiliser le tableau comme bon nous semble. Dans cet exemple simple, nous allons simplement utiliser le inspect module pour afficher les colonnes et vérifier que notre table a été créée avec succès :

inspector = inspect(engine)
inspector.get_columns('book')
Out[*]:
[{'autoincrement': True,
  'default': None,
  'name': u'id',
  'nullable': False,
  'primary_key': 1,
  'type': INTEGER()},
 {'autoincrement': True,
  'default': None,
  'name': u'title',
  'nullable': True,
  'primary_key': 0,
  'type': VARCHAR()},
 {'autoincrement': True,
  'default': None,
  'name': u'primary_author',
  'nullable': True,
  'primary_key': 0,
  'type': VARCHAR()}]

Effectivement, en utilisant le .get_columns() méthode pour notre book table, nous voyons que nos trois colonnes ont été générées.

Exécuter des instructions SQL

Avec les bases en place, nous pouvons maintenant essayer d'exécuter du SQL brut à l'aide de SQLAlchemy.

Utilisation du module de texte

Une méthode pour exécuter du SQL brut consiste à utiliser le text module, ou Textual SQL . La façon la plus lisible d'utiliser text est d'importer le module, puis après s'être connecté au engine , définissez le text Chaîne d'instruction SQL avant d'utiliser .execute pour l'exécuter :

from sqlalchemy.sql import text
with engine.connect() as con:

    data = ( { "id": 1, "title": "The Hobbit", "primary_author": "Tolkien" },
             { "id": 2, "title": "The Silmarillion", "primary_author": "Tolkien" },
    )

    statement = text("""INSERT INTO book(id, title, primary_author) VALUES(:id, :title, :primary_author)""")

    for line in data:
        con.execute(statement, **line)

Ici, nous insérons deux enregistrements dans notre base de données en utilisant un text() -instruction définie.

Utilisation de la méthode d'exécution

La méthode alternative consiste à ignorer l'utilisation de text() et passez une chaîne SQL brute au .execute() méthode. Par exemple, ici nous utiliserons .execute() pour afficher les nouveaux enregistrements que nous avons insérés ci-dessus :

with engine.connect() as con:

    rs = con.execute('SELECT * FROM book')

    for row in rs:
        print row

Out[*]:
(4, u'The Hobbit', u'Tolkien')
(5, u'The Silmarillion', u'Tolkien')

Nous l'avons! Méthodes simples et efficaces pour exécuter des instructions SQL brutes dans SQLAlchemy.