§
}<ˆjºT ã óà — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z d d lm
Z
d d
lmZ d dlmZ d dl
mZ d
dlmZ d
dlmZ ddlmZ ddlmZ erZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ ddlm Z ddlm!Z! ddl"m#Z# ddl"m$Z$ ddl"m%Z% ddl&m'Z' dd l(m)Z) dd!l(m*Z* dGd(„Z+dHd*„Z, dIdJd>„Z-dKdB„Z. G dC„ dD¦ « Z/ G dE„ dF¦ « Z0dS )Lé )ÚannotationsN)ÚAny)ÚCallable)ÚDict)ÚIterator)ÚOptional)ÚSequence)ÚSet)Ú
TYPE_CHECKING)ÚUnion)Úinspecté )Úcompare)Úrenderé )Úutil)Úops)Ú
Connection)ÚDialect)Ú Inspector)ÚMetaData)Ú
SchemaItem)ÚConfig)ÚDowngradeOps)ÚMigrationScript)Ú
UpgradeOps)ÚNameFilterParentNames)ÚNameFilterType)ÚRenderItemFn©ÚMigrationContext)ÚScript)ÚScriptDirectoryÚcontextr! Úmetadatar Úreturnr c óT — t | |¦ « }|j ¦ « S )aB
Compare a database schema to that given in a
:class:`~sqlalchemy.schema.MetaData` instance.
The database connection is presented in the context
of a :class:`.MigrationContext` object, which
provides database connectivity as well as optional
comparison functions to use for datatypes and
server defaults - see the "autogenerate" arguments
at :meth:`.EnvironmentContext.configure`
for details on these.
The return format is a list of "diff" directives,
each representing individual differences::
from alembic.migration import MigrationContext
from alembic.autogenerate import compare_metadata
from sqlalchemy import (
create_engine,
MetaData,
Column,
Integer,
String,
Table,
text,
)
import pprint
engine = create_engine("sqlite://")
with engine.begin() as conn:
conn.execute(
text(
'''
create table foo (
id integer not null primary key,
old_data varchar,
x integer
)
'''
)
)
conn.execute(text("create table bar (data varchar)"))
metadata = MetaData()
Table(
"foo",
metadata,
Column("id", Integer, primary_key=True),
Column("data", Integer),
Column("x", Integer, nullable=False),
)
Table("bat", metadata, Column("info", String))
mc = MigrationContext.configure(engine.connect())
diff = compare_metadata(mc, metadata)
pprint.pprint(diff, indent=2, width=20)
Output::
[
(
"add_table",
Table(
"bat",
MetaData(),
Column("info", String(), table=