sql >> Database >  >> RDS >> Database

Hoe Raw SQL uit te voeren in SQLAlchemy

SQLAlchemy is een SQL-tool gebouwd met Python die ontwikkelaars een overvloed aan krachtige functies biedt voor het ontwerpen en beheren van hoogwaardige databases.

We zullen kort ingaan op het gebruik van SQLAlchemy en vervolgens dieper ingaan op het uitvoeren van onbewerkte SQL-instructies vanuit het comfort van de Python-domeintaal.

SQLAlchemy gebruiken

Zoals bij alle Python-bibliotheken, begin je met het installeren van SQLAlchemy. Eenmaal geïnstalleerd kunnen we beginnen met het plezier in Python.

Importeer vervolgens sqlalchemy zelf, importeer dan een paar modules zodat we gemakkelijk toegang hebben tot de SQLAlchemy database-engine:

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

Naast create_engine , importeren we ook een aantal extra modules die we nodig hebben om een ​​nieuwe tabel te maken. Voordat we echter zover komen, moet u ervoor zorgen dat SQLAlchemy is geïnstalleerd, geïmporteerd en werkt door .__version__ aan te roepen zoals zo:

print sqlalchemy.__version__
Out[*]: 1.0.9

Een tabel maken

We zullen de basisfunctionaliteit van SQLAlchemy, de SQL Expression Language, gebruiken om enkele metadata te maken dat een aantal gerelateerde modules (of objecten) zal bevatten die ons nieuwe book definiëren databasetabel:

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)

Bovenaan definiëren we metadata , dan geven we dat door aan de Table() methode, waarbij we onze tabel de naam geven book . Hierin definiëren we elke kolom, samen met belangrijke attributen zoals gegevenstype en primary_key .

Zodra onze tabel(len) zijn gedefinieerd en gekoppeld aan onze metadata object, moeten we een database-engine maken waarmee we verbinding kunnen maken. Dit wordt bereikt met behulp van de create_engine functie.

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

Voor ons voorbeeld gebruiken we een eenvoudige SQLite databank. U kunt ook verbindingsreeksen gebruiken voor andere engines, zoals MySQL of PostgreSQL. Hier is een voorbeeldsyntaxis voor het maken van een engine voor PostgreSQL:

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

Nu de engine is gemaakt, moeten we nu de .create_all() . gebruiken methode van onze metadata object en geef de engine door verbinding ermee, waardoor SQLAlchemy automatisch onze tabel voor ons genereert, zoals hierboven te zien is.

Als dat klaar is, kunnen we de tafel naar eigen inzicht gebruiken. In dit eenvoudige voorbeeld gebruiken we gewoon de inspect module om de kolommen te bekijken en te controleren of onze tabel met succes is gemaakt:

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()}]

En ja hoor, met behulp van de .get_columns() methode voor ons book tabel, zien we dat onze drie kolommen zijn gegenereerd.

SQL-statements uitvoeren

Nu de basis op orde is, kunnen we nu proberen wat onbewerkte SQL uit te voeren met SQLAlchemy.

De tekstmodule gebruiken

Een methode voor het uitvoeren van onbewerkte SQL is het gebruik van de text module, of Textual SQL . De meest leesbare manier om text te gebruiken is om de module te importeren, dan na verbinding te hebben gemaakt met de engine , definieer de text SQL-instructiereeks voordat u .execute gebruikt om het uit te voeren:

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)

Hier voegen we twee records in onze database in met behulp van een text() -gedefinieerde verklaring.

De execute methode gebruiken

De alternatieve methode is om text() . over te slaan en geef een onbewerkte SQL-string door aan de .execute() methode. Hier gebruiken we bijvoorbeeld .execute() om de nieuwe records te bekijken die we hierboven hebben ingevoegd:

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')

Daar hebben we het! Eenvoudige en effectieve methoden voor het uitvoeren van onbewerkte SQL-instructies in SQLAlchemy.


  1. Veelvoorkomende fouten met SQL Server

  2. Illegale mix van sorteringen MySQL-fout

  3. Geldige indelingsreeksvervangingen voor de SQLite StRFtime()-functie

  4. Recursie in Oracle