Перенос
Инициализация базы данных
Обратите внимание, что во всех примерах предполагается, что база данных уже существует.
Если это не так, и вам нужно создать таблицу, то это очень просто, потому что Ormar использует sqlchemy для построения базовых таблиц.
Все, что вам нужно сделать, это вызвать create_all (), как в приведенном ниже примере
| Sqimport alchemy
# get your databases url in sqlchemy format - same as used with databases instance used in Model definition
engine = sqlalchemy. create_engine ("sqlite://test.db")
Это значит быть метаданными, которые используются в ормарских модулях
metadata. create_all (engine)
|
Вы также можете создать отдельные таблицы, которые будут доступны в объекте ormar.ormar_config.
| Sqimport alchemy
# get your databases url in sqlchemy format - same as used with databases instance used in Model definition
engine = sqlalchemy.create_engine ("sqlite://test.db")
# Artist is an ormar model from previouses
Artist.ormar_config.table.create(engine)
|
!!!Предупредите, что вы создаёте таблицу только один раз, поэтому используйте консоль Python или удалите скрипты из производственного кода после первого использования.
Использование дистилляторов
Как и в случае с таблицами, используйте alembic, так как мы переносим таблицы на основе sqlalchemy.
Инициализация
Используйте командную строку для воспроизведения этого простого примера.
| Alembic init alembic
Alembic revision -autogenerate -m "Made Some changes"
Alembic Upgrade head
|
Пример файла env.py
Простой пример миграции дистиллятора должен быть аналогичен:
Если ваша структура приложения выглядит следующим образом:
| -> app
-> alembic (initialized folder - so run alembic init alembic inside app folder)
>> Модули (here are the models)
->_init__.py
>> my_models.py
|
Ваш файл env.py(в папке alembic) может быть похож на:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | from logging.config import fileConfig
Из sqlalchemy import create_engine
Импортный контекст Alembic Import
Import sys, os
# add app folder to system path (alternative is running it from parent folder with python -m..)
myPath = os.path.dirname(os.path.abspath (__file__))
sys.path.insert(0, myPath + '/..././')
This is the Alembic Config object, which provides
# Access to the Values within the .ini file in use.
config = 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 (the one used in ormar)
# for 'autogenerate' support
Из app.models.my import metadata
target_metadata = metadata
# set your url here or import from settings
# note that by default url is in saved sqlachemy.url variable in alembic.ini file
URL = "sqlite://test.db"
def run_migrations_offline ():
"Run migrations in 'offline' mode".
This configures the context with just a URL
И не только двигатель, но и не двигатель.
Здесь вы можете найти все необходимое. 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=URL,
target_metadata = target_metadata
literal_binds =True,
dialect_opts ={"paramstyle": "named"},
Если вы используете UUID поле set также этот парам
#prefix has to sqlalchemy import name in alembic
# that can be set by sqalchemy_moduel_prefix option (default 'sa')
user_modue_prefix ='sa.'
)
with context.begin_transaction ():
context.run ()
def run_migrations_online ():
"Run migrations in 'online' mode".
In this scenario we need to create an Engine
И согласие с контекстом.
"""
connectable = create_engine (URL)
connectable.connect() as connection:
Конфигурация (
connection=connection,
target_metadata = target_metadata
Если вы используете UUID поле set также этот парам
#prefix has to sqlalchemy import name in alembic
# that can be set by sqalchemy_moduel_prefix option (default 'sa')
user_modue_prefix ='sa.'
)
with context.begin_transaction ():
context.run ()
if context.is ():
Run_migrations_offline ()
else:
Run_migrations_online ()
|
Исключить таблицы
Вы также можете включить/исключить конкретные таблицы с помощью параметра include_object, который передается в context.configure. Это должна быть функция, возвращающая True/False для данного объекта.
Пример функции исключает таблицу, имя которой начинается с data_, если она не является "data_jobs":
| def include (object, name, type_, reflected, compare_to):
if name and name.startswith ('data_') and name not in ['data_jobs']:
Возврат Ложь
Возвращение True
|
!!!Обратите внимание, что параметры функции include_objects (вы можете изменить имя) обязательны и определены в alembic, чтобы проверить их эффективность. Проверьте документ alembic
Затем передайте его в контекст (онлайн и оффлайн):
| Конфигурация (
url=URL,
target_metadata = target_metadata
literal_binds =True,
dialect_opts ={"paramstyle": "named"},
user_modue_prefix ='sa.',
include =include object
)
|
!!!info Вы можете прочитать больше информации о создании, изменении и миграции таблиц в документации по созданию таблицы sqlchemy.