Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generate of alembic, no engine shows up #333

Open
xodiumx opened this issue Aug 29, 2024 · 0 comments
Open

generate of alembic, no engine shows up #333

xodiumx opened this issue Aug 29, 2024 · 0 comments

Comments

@xodiumx
Copy link

xodiumx commented Aug 29, 2024

Hi, trying to use alembic in conjunction with clickhouse_sqlalchemy, but when running the command:

alembic revision --autogenerate -m "init"

engine is not generated in the migration


To Reproduce

# env
from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool
from clickhouse_sqlalchemy.alembic.dialect import patch_alembic_version, include_object

from alembic import context

from core.models.search import metadata

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
fileConfig(config.config_file_name)

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata


target_metadata = metadata

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.


def run_migrations_offline():
    """Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.

    """
    url = config.get_main_option("sqlalchemy.url")
    context.configure(
        url=url,
        target_metadata=target_metadata,
        literal_binds=True,
        dialect_opts={"paramstyle": "named"},
    )

    with context.begin_transaction():
        patch_alembic_version(context)
        context.run_migrations()


def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    connectable = engine_from_config(
        config.get_section(config.config_ini_section),
        prefix="sqlalchemy.",
        poolclass=pool.NullPool,
    )

    with connectable.connect() as connection:
        context.configure(connection=connection, target_metadata=target_metadata, include_object=include_object)

        with context.begin_transaction():
            patch_alembic_version(context)
            context.run_migrations()


if context.is_offline_mode():
    run_migrations_offline()
else:
    run_migrations_online()
# model
from sqlalchemy import Column, MetaData, func
from clickhouse_sqlalchemy import get_declarative_base
from clickhouse_sqlalchemy.engines import ReplicatedReplacingMergeTree
from clickhouse_sqlalchemy.types import String, Date, DateTime

metadata = MetaData()
Base = get_declarative_base(metadata=metadata)

class MyTable(Base):
    __tablename__ = "my_table"

    hash = Column(String, primary_key=True)
    dt = Column(Date, primary_key=True)
    created_at = Column(DateTime, )

    __table_args__ = (
        ReplicatedReplacingMergeTree(
            table_path="/clickhouse/tables/{uuid}/{shard}",
            replica_name="{replica}",
            partition_by=func.toYYYYMM(dt),
            order_by=(hash, dt),
            index_granularity=8192,
        ),
    )

Result

"""init

Revision ID: e0e63a0b37ca
Revises:
Create Date: 2024-08-29 14:24:27.711940

"""
....
def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table(
        "clicks",
        sa.Column("hash", String(), nullable=False),
        sa.Column("dt", Date(), nullable=False),
        sa.Column("created_at", DateTime(), nullable=True),
        sa.PrimaryKeyConstraint("hash", "dt"),

Versions

alembic               1.13.2
asynch                0.2.4
clickhouse-driver     0.2.8
clickhouse-sqlalchemy 0.3.2
SQLAlchemy            2.0.31

What am I doing wrong? Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant