sql >> Database teknologi >  >> RDS >> Database

Sådan udføres rå SQL i SQLAlchemy

SQLAlchemy er et SQL-værktøj bygget med Python, der giver udviklere en overflod af kraftfulde funktioner til at designe og administrere højtydende databaser.

Vi vil kort undersøge, hvordan man bruger SQLAlchemy og derefter dykke dybere ned i, hvordan man udfører rå SQL-sætninger fra Python-domænesprogets komfort.

Brug af SQLAlchemy

Som med alle Python-biblioteker, start med at installere SQLAlchemy. Når det er installeret, kan vi begynde det sjove i Python.

Importer derefter sqlalchemy selv, så importer et par moduler, så vi nemt kan få adgang til SQLAlchemy-databasemotoren:

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

Ud over create_engine , importerer vi også en række ekstra moduler, som vi skal bruge for at oprette en ny tabel. Før vi kommer til det, skal du sørge for, at SQLAlchemy er installeret, importeret og fungerer ved at kalde .__version__ sådan:

print sqlalchemy.__version__
Out[*]: 1.0.9

Oprettelse af en tabel

Vi vil bruge den grundlæggende funktionalitet i SQLAlchemy, som er SQL Expression Language, til at skabe nogle metadata der vil indeholde et antal relaterede moduler (eller objekter), der definerer vores nye book database tabel:

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)

Øverst definerer vi metadata , så sender vi det ind i Table() metode, hvor vi giver vores tabel navnet book . Inden for denne definerer vi hver kolonne sammen med vigtige attributter som datatype og primary_key .

Når vores tabell(er) er defineret og knyttet til vores metadata objekt, skal vi oprette en databasemotor, som vi kan oprette forbindelse til. Dette opnås ved hjælp af create_engine funktion.

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

For vores eksempel vil vi bruge en simpel SQLite database. Du kan også bruge forbindelsesstrenge til andre motorer såsom MySQL eller PostgreSQL. Her er et eksempel på syntaks til at oprette en motor til PostgreSQL:

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

Med motoren oprettet, skal vi nu bruge .create_all() metode til vores metadata objekt og send engine forbindelse til det, hvilket automatisk vil få SQLAlchemy til at generere vores tabel for os, som det ses ovenfor.

Når det er færdigt, kan vi bruge bordet, som det passer os. I dette simple eksempel bruger vi bare inspect modul for at se kolonnerne og bekræfte, at vores tabel blev oprettet:

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

Sikkert nok ved at bruge .get_columns() metode til vores book tabel, ser vi, at vores tre kolonner blev genereret.

Udførelse af SQL-sætninger

Med det grundlæggende på plads kan vi nu prøve at udføre noget rå SQL ved hjælp af SQLAlchemy.

Brug af tekstmodulet

En metode til at udføre rå SQL er at bruge text modul eller Textual SQL . Den mest læsbare måde at bruge text på er at importere modulet, derefter efter tilslutning til engine , definer text SQL-sætningsstreng før brug af .execute for at køre det:

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)

Her indsætter vi to poster i vores database ved at bruge en text() -defineret erklæring.

Brug af udførelsesmetoden

Den alternative metode er at springe over med text() og send en rå SQL-streng til .execute() metode. For eksempel vil vi her bruge .execute() for at se de nye optegnelser, vi indsatte ovenfor:

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

Der har vi det! Enkle og effektive metoder til at udføre rå SQL-sætninger i SQLAlchemy.


  1. Valg af værdier fra Oracle Table Variable/Array?

  2. Forstå Cloud-baseret SQL Server Performance Monitoring

  3. Sådan fungerer SUBSTR()-funktionen i MySQL

  4. Sådan laver du en indre joinforbindelse på rækkenummer i sql-server