sql >> Databáze >  >> RDS >> Database

Jak spustit nezpracovaný SQL v SQLAlchemy

SQLAlchemy je nástroj SQL vytvořený v Pythonu, který poskytuje vývojářům množství výkonných funkcí pro navrhování a správu vysoce výkonných databází.

Krátce prozkoumáme, jak používat SQLAlchemy, a poté se ponoříme hlouběji do toho, jak provádět nezpracované příkazy SQL z pohodlí jazyka domény Python.

Použití SQLAlchemy

Stejně jako u všech knihoven Pythonu začněte instalací SQLAlchemy. Po instalaci se můžeme začít bavit v Pythonu.

Dále importujte sqlalchemy a poté importujte několik modulů, abychom mohli snadno přistupovat k databázovému stroji SQLAlchemy:

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

Kromě create_engine , importujeme také řadu dalších modulů, které budeme potřebovat k vytvoření nové tabulky. Než se k tomu ale dostaneme, zavolejte .__version__ a ujistěte se, že SQLAlchemy byla nainstalována, importována a funguje takhle:

print sqlalchemy.__version__
Out[*]: 1.0.9

Vytvoření tabulky

K vytvoření některých metadata budeme používat základní funkce SQLAlchemy, což je jazyk SQL Expression Language který bude obsahovat řadu souvisejících modulů (nebo objektů), které definují naši novou book databázová tabulka:

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)

Nahoře definujeme metadata , pak to předáme do Table() metoda, kde naší tabulce dáme název book . V rámci toho definujeme každý sloupec spolu s důležitými atributy, jako je datový typ a primary_key .

Jakmile jsou naše tabulky definovány a spojeny s našimi metadata musíme vytvořit databázový stroj, se kterým se můžeme spojit. Toho lze dosáhnout pomocí create_engine funkce.

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

V našem příkladu budeme používat jednoduchý SQLite databáze. Můžete také použít připojovací řetězce pro jiné motory, jako je MySQL nebo PostgreSQL. Zde je příklad syntaxe pro vytvoření enginu pro PostgreSQL:

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

S vytvořeným enginem nyní musíme použít .create_all() metoda našich metadata objekt a předejte engine připojení k němu, což automaticky způsobí, že SQLAlchemy za nás vygeneruje naši tabulku, jak je vidět výše.

Po dokončení můžeme tabulku používat, jak uznáme za vhodné. V tomto jednoduchém příkladu použijeme pouze inspect modul pro zobrazení sloupců a ověření, že naše tabulka byla úspěšně vytvořena:

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

Samozřejmě pomocí .get_columns() metodu pro naši book tabulky, vidíme, že byly vygenerovány naše tři sloupce.

Provádění příkazů SQL

Se základy na místě se nyní můžeme pokusit provést nějaké nezpracované SQL pomocí SQLAlchemy.

Použití textového modulu

Jednou z metod pro provádění nezpracovaných SQL je použití text modul nebo Textual SQL . Nejčitelnější způsob použití text je importovat modul a poté po připojení k engine , definujte text Řetězec příkazu SQL před použitím .execute spustit:

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)

Zde vkládáme dva záznamy do naší databáze pomocí text() -definovaný příkaz.

Použití metody spuštění

Alternativní metodou je přeskočit pomocí text() a předejte nezpracovaný řetězec SQL do .execute() metoda. Například zde použijeme .execute() pro zobrazení nových záznamů, které jsme vložili výše:

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

Tady to máme! Jednoduché a efektivní metody pro provádění nezpracovaných příkazů SQL v SQLAlchemy.


  1. Jak vymazat fond připojení ODP.NET při chybách připojení?

  2. Existuje v Microsoft SQL Server booleovský datový typ jako v MySQL?

  3. Jak provádět změny schématu v MySQL a MariaDB bezpečným způsobem

  4. gem install pg nefunguje na OSX Lion