Генерация схемы базы данных с использованием SQLAlchemy - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть очень простая схема базы данных «один ко многим» (у родителя может быть много детей, но у ребенка может быть только один родитель).Мои модели SQLAlchemy выглядят так:

from sqlalchemy import Table, Column, Integer, ForeignKey
from sqlalchemy.orm import relationship

from models import Base

class Parent(Base):
    __tablename__ = 'Parent'
    id = Column(Integer, primary_key=True)
    children = relationship('Child', backref='parent')

class Child(Base):
    __tablename__ = 'Child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('Parent.id'))

Я могу создать таблицы в базе данных, используя следующие команды:

engine = create_engine('mysql://localhost:3306/testdb')
Base.metadata.create_all(engine)

Мне интересно, как выглядит необработанный SQLнравится создавать эти таблицы.Я мог бы представить, что это будет выглядеть примерно так, но я хотел бы быть уверен:

CREATE TABLE Parent (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
);

CREATE TABLE Child (
    id INT NOT NULL AUTO_INCREMENT,
    parent_id int,
    PRIMARY KEY (id),
    CONSTRAINT FK_Parent FOREIGN KEY (parent_id) REFERENCES Parent(id)
);

Есть ли способ генерировать схему базы данных в raw sql с использованием SQLAlchemy?Я знаю, что могу сгенерировать запрос в raw sql , но мне интересно, как создать исходную схему базы данных.

Кроме того, есть ли способ генерировать схему в зависимости отфактический тип базы данных (например, сырой sql будет выглядеть немного иначе для MySQL и PostgreSQL)?

1 Ответ

0 голосов
/ 08 декабря 2018

вывод "как можно получить созданную таблицу, перетаскивание таблицы, вывод в виде строки"

from sqlalchemy import MetaData, Table, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import CreateTable
import sqlalchemy
print(sqlalchemy.__version__)

Base = declarative_base()

class Parent(Base):
    __tablename__ = 'Parent'
    id = Column(Integer, primary_key=True)
    children = Column(String(255))

user = Table('users', MetaData(bind=None),
            Column('id', Integer(), primary_key=True, nullable=False),
            Column('name', String()),
            Column('fullname', String()),
            Column('password', String()), schema=None)

print(CreateTable(Parent.__table__))
print(CreateTable(user))

Вывод:

1.3.0b1

CREATE TABLE "Parent" (
    id INTEGER NOT NULL, 
    children VARCHAR(255), 
    PRIMARY KEY (id)
)

CREATE TABLE users (
    id INTEGER NOT NULL, 
    name VARCHAR, 
    fullname VARCHAR, 
    password VARCHAR, 
    PRIMARY KEY (id)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...