Метод create_all
Метод create_all применяется к объекту
SQLAlchemy и создаёт в базе данных все
таблицы, которые описаны моделями. Первым
параметром передаётся объект bind -
подключение к базе данных. Если его не указать,
метод использует подключение по умолчанию.
Синтаксис
db.create_all(bind=None)
Пример
Давайте создадим приложение с одной моделью
User и вызовем метод create_all:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
with app.app_context():
db.create_all()
print('tables created')
Результат выполнения кода:
"tables created"
Пример
Давайте создадим несколько моделей и проверим,
что метод create_all создаёт таблицы
для всех сразу:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
with app.app_context():
db.create_all()
print(db.metadata.tables.keys())
Результат выполнения кода:
dict_keys(['user', 'article'])
Пример
Давайте передадим подключение явно через
параметр bind:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
with app.app_context():
engine = db.engine
db.create_all(bind=engine)
print('ok')
Результат выполнения кода:
"ok"