Вы можете использовать метод расширения GetMigrations класса DatabaseFacade
(возвращенный свойством Database
для DbContext
), чтобы получить список ожидающих имен миграции.
Затем вы можете получить услугу IMigrator
и использовать метод Migrate
, передающий каждое целевое имя миграции:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
DbContext db = ...;
var pendingMigrations = db.Database.GetPendingMigrations().ToList();
if (pendingMigrations.Any())
{
var migrator = db.Database.GetService();
foreach (var targetMigration in pendingMigrations)
migrator.Migrate(targetMigration);
}
DATA = { u'spam': u'eggs', u'foo': frozenset([u'Gah!']), u'bar': { u'baz': 97 },
u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])]}
def convert(data):
if isinstance(data, basestring):
return str(data)
elif isinstance(data, collections.Mapping):
return dict(map(convert, data.iteritems()))
elif isinstance(data, collections.Iterable):
return type(data)(map(convert, data))
else:
return data
print DATA
print convert(DATA)
# Prints:
# {u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])], u'foo': frozenset([u'Gah!']), u'bar': {u'baz': 97}, u'spam': u'eggs'}
# {'bar': {'baz': 97}, 'foo': frozenset(['Gah!']), 'list': ['list', (True, 'Maybe'), set(['and', 'a', 'set', 1])], 'spam': 'eggs'}
Предположения:
data.encode('utf-8')
, а не str(data)
, если вам нужна явная кодировка). Если вам нужно поддерживать другие типы контейнеров, то, надеюсь, очевидно, как следовать шаблону и добавьте к ним дела.
Чтобы сделать все встроенным (нерекурсивным):
{str(k):(str(v) if isinstance(v, unicode) else v) for k,v in my_dict.items()}
Я знаю, что опаздываю на это:
def convert_keys_to_string(dictionary):
"""Recursively converts dictionary keys to strings."""
if not isinstance(dictionary, dict):
return dictionary
return dict((str(k), convert_keys_to_string(v))
for k, v in dictionary.items())
str
в int
– Germano
15 March 2016 в 10:29
для не-вложенного dict (так как название не упоминает этот случай, это может быть интересно для других людей)
{str(k): str(v) for k, v in my_dict.items()}
Если вы хотите сделать это inline и не нуждаетесь в рекурсивном спуске, это может сработать:
DATA = { u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
print DATA
# "{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }"
STRING_DATA = dict([(str(k), v) for k, v in data.items()])
print STRING_DATA
# "{ 'spam': 'eggs', 'foo': True, 'bar': { u'baz': 97 } }"
{ str(key):value for key,value in data.items() }
– AnjoMan
13 May 2015 в 14:49
def to_str(key, value):
if isinstance(key, unicode):
key = str(key)
if isinstance(value, unicode):
value = str(value)
return key, value
передать ключ и значение ему и добавить рекурсию к вашему коду для учета внутреннего словаря.
type(data)(map(convert, data))
вместоmap(convert, data)
? – Abbasov Alexander 12 July 2013 в 00:29