Как к базам данных SQL Server управления версиями?

_Genome[ii] содержит список, который содержит набор, по меньшей мере, на Neuron экземпляре. Упрощенно, вы можете сделать это так:

>>> a = [{Neuron()} for _ in [1,2]]
>>> a
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> q = [a]
>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>>

Если вы напечатаете _Genome, это будет выглядеть примерно так - я предполагаю, что _Genome это как список | q выше должно быть аналогично _Genome.

Индексирование в него выглядит следующим образом

>>> q[0]
[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]
>>> type(q[0])

>>> q[0][0]
{<__main__.Neuron object at 0x0000000002CAFF28>}
>>> type(q[0][0])

>>> 

Поведение множества хорошо документировано - как и большинство Python.

Один из способов доступа к содержимому набора - цикл for

>>> for thing in q[0][0]:
    print(thing.x)
50
>>> 

Другой способ доступа к содержимому набора - метод pop(), но при этом удаляется . произвольный предмет из множества. Я не думаю, что вы действительно этого хотите - вы не можете контролировать, какой предмет вы получаете, если их более одного, а в оригинальном наборе на один предмет меньше.

>>> x = [[{Neuron()},{Neuron}]]
>>> t = x[0][0].pop()
>>> t
<__main__.Neuron object at 0x0000000002C2F2E8>
>>> t.x
50
>>> x
[[set(), {}]]
>>>

Вы также можете составить список из набора и использовать индексы для доступа к содержимому списка.

>>> q
[[{<__main__.Neuron object at 0x0000000002CAFF28>}, {<__main__.Neuron object at 0x0000000002CAFF60>}]]
>>> z = list(q[0][0])
>>> z
[<__main__.Neuron object at 0x0000000002CAFF28>]
>>> z[0].x
50
>>>

Все это кажется слишком сложным, и вам, вероятно, будет лучше изменить способ хранения экземпляров Neuron. Я понятия не имею, возможно ли это для вас. Просто обойтись без набора, содержащего один экземпляр:

>>> a = [Neuron() for _ in [1,2]]
>>> a
[<__main__.Neuron object at 0x0000000002C2FDD8>, <__main__.Neuron object at 0x0000000002CD00B8>]
>>> q = [a]
>>> q[0][0]
<__main__.Neuron object at 0x0000000002C2FDD8>
>>> type(q[0][0])

>>> q[0][0].x
50
>>>

16
задан John Saunders 18 August 2009 в 13:56
поделиться

8 ответов

Мы только что начали делать следование некоторых наших проектов, и это, кажется, работает вполне хорошо для заполнения "статических" таблиц.

Наши сценарии следуют за шаблоном, где временная таблица создается и затем заполняется с тем, что мы хотим, чтобы реальная таблица напомнила. Мы только помещаем человекочитаемые значения здесь (т.е. мы не включаем столбцы IDENTITY/GUID). Остаток от сценария берет временную таблицу и работает соответствующий, ВСТАВЛЯТЬ/ОБНОВЛЯТЬ/ОПЕРАТОРЫ УДАЛЕНИЯ, чтобы заставить реальную таблицу напомнить временную таблицу. То, когда мы должны изменить эти "статические" данные, все, что мы должны обновить, является населением временной таблицы. Это означает, что DIFFing между работами версий как ожидалось и сценарии отката так же просты как получение предыдущей версии от управления исходным кодом.

ВСТАВЛЕНИЕ/ОБНОВЛЕНИЕ/УДАЛЕНИЕ только должно быть записано однажды. На самом деле наши сценарии немного более сложны, и имеют два набора проверки, выполненной перед фактическими операторами DML. Один набор проверяет временные данные таблицы (т.е. что мы не собираемся нарушать любые ограничения путем попытки заставить базу данных напомнить временную таблицу). Другой проверять временную таблицу и целевую базу данных (т.е. что внешние ключи доступны).

3
ответ дан 30 November 2019 в 23:09
поделиться

Для базы данных (схема) управление версиями мы используем пользовательские свойства, которые добавляются к базе данных, когда установщик, работал. Содержание этих сценариев сгенерировано с нашими сценариями сборки.

Сценарий для установки свойств похож на это:

DECLARE @AssemblyDescription sysname
SET @AssemblyDescription = N'DailyBuild_20090322.1'

DECLARE @AssemblyFileVersion sysname
SET @AssemblyFileVersion = N'0.9.3368.58294'

-- The extended properties DatabaseDescription and DatabaseFileVersion contain the
-- AssemblyDescription and AssemblyFileVersion of the build that was used for the
-- database script that creates the database structure.
-- 
-- The current value of these properties can be displayed with the following query:
-- SELECT * FROM sys.extended_properties

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseDescription')
BEGIN
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription
END
ELSE
BEGIN
    EXEC sys.sp_addextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription
END

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseFileVersion')
BEGIN
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion
END
ELSE
BEGIN
    EXEC sys.sp_addextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion
END
GO
1
ответ дан 30 November 2019 в 23:09
поделиться

Существует свободный продукт Microsoft под названием Мастер Печати по базе данных, который можно использовать для сценариев всей базы данных (схема и данные). Это является большим для взятия снимков текущего состояния DB и позволит Вам воссоздать с нуля в любой точке

1
ответ дан 30 November 2019 в 23:09
поделиться

Можно получить версию Studio управления SQL для SQL Server Express. Я полагаю, что Вы сможете использовать это для создания сценариев схемы базы данных. Я думаю, что это оставит Вас для создания сценариев вручную для вставки стартовых записей.

Затем поместите все сценарии в управление исходным кодом, наряду с основным сценарием, который запускает отдельные скрипты в правильном порядке.

Вы сможете выполнить diffs, использующий windiff (свободный с Visual Studio SDK), или иначе Вне всякого сравнения недороги, и большой инструмент разности/слияния/синхронизации.

0
ответ дан 30 November 2019 в 23:09
поделиться

Необходимо скорее использовать DB определенное управление версиями.

http://msdn.microsoft.com/en-us/library/ms189050.aspx

Когда любой, параметры базы данных READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION идут, логические копии (версии), сохраняется для всех модификаций данных, выполненных в базе данных. Каждый раз, когда строка изменяется определенной транзакцией, экземпляр Механизма базы данных хранит версию ранее зафиксированного изображения строки в tempdb. Каждая версия отмечена с порядковым номером транзакции транзакции, которая внесла изменение. Версии измененных строк объединяются в цепочку с помощью списка ссылок. Новейшее значение строки всегда хранится в текущей базе данных и объединяется в цепочку к имеющим версию строкам, сохраненным в tempdb.

0
ответ дан 30 November 2019 в 23:09
поделиться

Система Команды Visual Studio MS для Разработчиков Базы данных имеет функциональность для легкой генерации, создают сценарии для целой схемы. Только недостаток является стоимостью!

Вы рассмотрели использование SubSonic?

0
ответ дан 30 November 2019 в 23:09
поделиться

Я использую bcp для этого (утилита массовой загрузки, часть стандартной установки SQL Server, экспресс-версия включена).

Для каждой таблицы с данными нужен управляющий файл Table.ctl и файл данных Table.csv (это текстовые файлы, которые могут быть созданы из существующей базы данных с помощью bcp ). Как текстовые файлы, они могут быть очень легко версированы.

В рамках моих пакетов генерации (см. мой ответ там для получения дополнительной информации), я перебираю каждый контрольный файл следующим образом:

SET BASE_NAME=MyDatabaseName
SET CONNECT_STRING=.\SQLEXPRESS

FOR /R %%i IN (.) DO (
  FOR %%j IN ("%%~fi\*.ctl") DO (
    ECHO +   %%~nj
    bcp %BASE_NAME%..%%~nj in "%%~dpsj%%~nj.csv" -T -E -S %CONNECT_STRING% -f "%%~dpsj%%~nj.ctl" >"%TMP%\%%~nj.log"
    IF %ERRORLEVEL% GTR 0 (
      TYPE "%TMP%\%%~nj.log"
      GOTO ERROR_USAGE
    )
  )
)

Текущий Ограничением этого сценария является то, что имя файла должно быть именем таблицы, что может быть невозможно, если имя таблицы содержит определенные специальные символы.

0
ответ дан 30 November 2019 в 23:09
поделиться

В SQL Source Control 2.0 добавлена ​​поддержка статических данных, которая в настоящее время доступна в бета-версии. Дополнительную информацию о том, как это попробовать, можно найти здесь:

http://www.red-gate.com/messageboard/viewtopic.php?t=12298

2
ответ дан 30 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: