MIG ([M] ediaGoblin [я] с [G] ечить!) было написано Кристофер Аллан Уэббера на GNU MediaGoblin.
С тех пор, Joar Wandborg добыл необходимое на функциональности из MediaGoblin и в отдельном пакете, который'S README вы читаете в данный момент.
Init миграции
Либо запустить mig.run (двигатель, имя, модели, миграции) или добавить таблицу mig.models.MigrationData вручную.
Примечание
Если ваша база данных уже заселены и нет миграция версия строки в таблице MigrationData, mig.run () не будет.
Если у вас уже есть заполненной базы данных вы должны создать MigrationData (имя = '' migrations_handle, версия = 0) ряд для ваших перемещений в таблице MigrationData, иначе МиГ постараемся инициировать базу данных.
Пример установки
Создать миграции
.. Код-блок :: питон
& NBSP; & NBSP; & NBSP; от МиГ импорта RegisterMigration
& NBSP; & NBSP; & NBSP; от SQLAlchemy импортировать метаданные, таблицы, колонки, целое, Unicode, DateTime, \
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Внешний ключ
& NBSP; & NBSP; & NBSP; Миграции = {}
& NBSP; & NBSP; & NBSP; RegisterMigration (1, МИГРАЦИИ)
& NBSP; & NBSP; & NBSP; Def create_site_table (db_conn):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; метаданные = метаданных (связывать = db_conn.bind)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; user_table = Таблица ("пользователь", метаданные, автозагрузка = True,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; autoload_with = db_conn.bind)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_table = Таблица ("сайт", метаданные,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Колонка ('ID', целое, primary_key = True),
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Колонка ("домен", Unicode),
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Колонка ("owner_id", Целое, ForeignKey (user_table.columns ['ID'])))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_table.create ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; db_conn.commit ()
& NBSP; & NBSP; & NBSP; RegisterMigration (2 МИГРАЦИИ)
& NBSP; & NBSP; & NBSP; Def item_add_site_id (db_conn):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; метаданные = метаданных (связывать = db_conn.bind)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; item_table = Таблица ("пункт", метаданные, автозагрузка = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_table = Таблица ("сайт", метаданные, автозагрузка = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_id_col = Колонка ("Site_ID", Integer, ForeignKey (
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_table.columns ['ID']))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_id_col.create (item_table)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; db_conn.commit ()
Регистрация моделей
.. Код-блок :: питон
& NBSP; & NBSP; & NBSP; импорт Bcrypt
& NBSP; & NBSP; & NBSP; от DateTime DateTime импорта
& NBSP; & NBSP; & NBSP; от мигрируют импорта ревизию
& NBSP; & NBSP; & NBSP; от talkatv дБ импорта
& NBSP; & NBSP; & NBSP; Класс пользователя (db.Model):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; ID = db.Column (db.Integer, primary_key = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Имя пользователя = db.Column (db.String (60), уникальный = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; E-mail = db.Column (db.String (255), уникальный = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; пароль = db.Column (db.String (60))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; не Def __init __ (сам, имя пользователя, адрес электронной почты, пароль = нет, OpenID = None):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.username = имя пользователя
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.email = электронной почте
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если пароль:
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.set_password (пароль)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если OpenID:
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.openid = OpenID
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __repr __ (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; возвращение '<Пользователь {0}>'. Формат (self.username)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def set_password (я, пароль):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.password = bcrypt.hashpw (пароль, bcrypt.gensalt ())
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def check_password (я, пароль):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; вернуться bcrypt.hashpw (пароль, self.password) == self.password
& NBSP; & NBSP; & NBSP; класс OpenID (db.Model):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; ID = db.Column (db.Integer, primary_key = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; URL = db.Column (db.String ())
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; создано = db.Column (db.DateTime)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; user_id = db.Column (db.Integer, db.ForeignKey ('user.id'))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Пользователь = db.relationship ("Пользователь",
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; backref = db.backref ('' OpenIDs, ленивый = "динамических"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __init __ (сам, пользователь, URL):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.created = datetime.utcnow ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.user = пользователь
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.url = URL
& NBSP; & NBSP; & NBSP; Класс товара (db.Model):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; ID = db.Column (db.Integer, primary_key = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Название = db.Column (db.String ())
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; URL = db.Column (db.String (), уникальный = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; создано = db.Column (db.DateTime)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; site_id = db.Column (db.Integer, db.ForeignKey ('site.id'))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Сайт = db.relationship ('сайта',
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; backref = db.backref ('' предметы, ленивый = "динамических"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; не Def __init __ (сам, гиперссылка, название, сайт = None):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если сайте:
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.site = сайте
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.title = Название
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.url = URL
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.created = datetime.utcnow ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __repr __ (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Возвращение "<Элемент {0} ({1})> 'Формат. (
self.url,
self.site.owner.username если self.site еще ничего нет)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def as_dict (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; мне = {
"ID": self.id,
Название работы: self.title,
"гиперссылка": self.url,
"создан": self.created.isoformat ()}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если self.site:
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; me.update ({«владелец»: self.site.owner.id})
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; вернуться мне
& NBSP; & NBSP; & NBSP; Класс сайта (db.Model):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; ID = db.Column (db.Integer, primary_key = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; создано = db.Column (db.DateTime)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; домен = db.Column (db.String)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; owner_id = db.Column (db.Integer, db.ForeignKey ('user.id'))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Владелец = db.relationship ("Пользователь",
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; backref = db.backref ('' сайты, ленивый = "динамических"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __init __ (сам, владелец домена):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.owner = владелец
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.domain = домен
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.created = datetime.utcnow ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __repr __ (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; возвращение '<{0} ({1}) сайта>' Формат. (
self.domain,
self.owner.username)
& NBSP; & NBSP; & NBSP; Класс комментарий (db.Model):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; ID = db.Column (db.Integer, primary_key = True)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; создано = db.Column (db.DateTime)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Текст = db.Column (db.String ())
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; item_id = db.Column (db.Integer, db.ForeignKey ("item-id"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Пункт = db.relationship ("Пункт",
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; backref = db.backref ("Комментарии", ленивый = "динамических"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; user_id = db.Column (db.Integer, db.ForeignKey ('user.id'))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Пользователь = db.relationship ("Пользователь",
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; backref = db.backref ("Комментарии", ленивый = "динамических"))
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __init __ (сам, пункт, пользователь, текст):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.item = пункт
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.user = пользователь
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.text = текст
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; self.created = datetime.utcnow ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def __repr __ (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; возвращение '<Комментарий ({1}) {0}>' Формат. (
self.text [25] + ('...' если LEN (self.text)> 25 еще ''),
self.user.username)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Def as_dict (само):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; мне = {
"ID": self.id,
"Пункт": self.item.id,
"user_id": self.user.id,
"Имя пользователя": self.user.username,
«текст»: self.text,
"создан": self.created.isoformat ()}
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; вернуться мне
& NBSP; & NBSP; & NBSP; МОДЕЛИ = [
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Пользователь,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Комментарий,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Пункт,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; OpenID,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Сайта]
Запуск миграции
.. Код-блок :: питон
& NBSP; & NBSP; & NBSP; от МиГ импорта перспективе
& NBSP; & NBSP; & NBSP; от mig.models импортировать MigrationData
& NBSP; & NBSP; & NBSP; от YourApp дБ импорта
& NBSP; & NBSP; & NBSP; от yourapp.models импортировать модели
& NBSP; & NBSP; & NBSP; от yourapp.migrations импортных МИГРАЦИЙ
& NBSP; & NBSP; & NBSP; Def check_or_create_mig_data ():
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если не db.engine.dialect.has_table (db.session, '') mig__data:
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; # Создание таблицы миграции
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; MigrationData .__ стол __. Создать (db.engine)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; # Создание первого миграции, так что МиГ не инициализировать.
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; миграция = MigrationData (имя = и '__ main__ ", версия = 0)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; db.session.add (миграция)
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; db.session.commit ()
& NBSP; & NBSP; & NBSP; если __name__ == '__main__ ":
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; если db.engine.dialect.has_table (db.session, "пользователь"):
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; # БД уже заселены, проверьте миграции являются активными,
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; # В противном случае создать таблицу миграции данных
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; check_or_create_mig_data ()
& NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Run (db.engine, и '__ main__ ", МОДЕЛИ, МИГРАЦИИ)
Требования
- Python
Комментарии не найдены