Метод create_all класса MetaData
Метод create_all класса MetaData создает
все таблицы, которые были связаны с данным объектом
метаданных, в целевой базе данных. Первым параметром
метод принимает объект подключения bind, например
движок Engine или соединение Connection.
Метод проверяет существование каждой таблицы перед
созданием, поэтому повторный вызов не приводит к ошибке.
Параметр checkfirst по умолчанию равен True и
отвечает за такую проверку.
Синтаксис
MetaData.create_all(bind, [tables], [checkfirst])
Пример
Давайте создадим движок для базы SQLite в памяти
и опишем таблицу articles через объект
MetaData, а затем создадим ее методом
create_all:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
print(metadata.tables.keys())
Результат выполнения кода:
"dict_keys(['articles'])"
Пример
Давайте посмотрим, какой SQL-запрос выполняет метод
create_all при создании таблицы:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR,
text VARCHAR,
status VARCHAR,
num INTEGER,
PRIMARY KEY (id)
)
Пример
Давайте создадим несколько таблиц сразу и убедимся,
что метод create_all создает их все:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String)
)
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String)
)
metadata.create_all(engine)
print(sorted(metadata.tables.keys()))
Результат выполнения кода:
['articles', 'users']
Пример
Давайте создадим только одну конкретную таблицу, передав
ее вторым параметром в метод create_all:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String)
)
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String)
)
metadata.create_all(engine, tables=[articles])
print(sorted(metadata.tables.keys()))
Результат выполнения кода:
['articles', 'users']