hxs = HtmlXPathSelector(response) #response is already in Selector, use direct `response.xpath`
url = urllib.parse.urljoin(response.url, url)
использовать как:
url = response.urljoin (url)
да, он будет остановлен как повторяющийся запрос к prev URL, вам нужно добавить dont_filter=True
проверить
Я добавил бы другой столбец к таблице сначала, заполнил бы это с новым PK.
Затем я использовал бы операторы обновления для обновления новых fk полей во всех связанных таблицах.
Затем можно отбросить старый PK и старые fk поля.
Править: Да, как Ian говорит, необходимо будет отбросить и затем воссоздать все ограничения внешнего ключа.
Не уверенный, который DBMS Вы используете, но если это, оказывается, SQL Server:
SET IDENTITY_INSERT [MyTable] ON
позволяет Вам обновлять/вставлять столбец первичного ключа. Затем, когда Вы сделаны, обновив ключи (Вы могли использовать КУРСОР для этого, если логика является сложной),
SET IDENTITY_INSERT [MyTable] OFF
Надежда, которая помогает!
Почему Вы даже обеспокоились бы? Смысл противооснованных первичных ключей "идентификационных данных" - то, что числа произвольны и бессмысленны.
Это может или не быть MS конкретный SQL, но: TRUNCATE TABLE сбрасывает счетчик идентификационных данных, таким образом, один способ сделать это быстрое и грязное должно было бы 1) Сделать Резервное копирование 2) содержание таблицы Copy для временной работы таблицы: 3) содержание таблицы временного файла Копии назад к таблице (который имеет столбец идентификационных данных):
SELECT Field1, Field2 INTO #MyTable FROM MyTable
TRUNCATE TABLE MyTable
INSERT INTO MyTable
(Field1, Field2)
SELECT Field1, Field2 FROM #MyTable
SELECT * FROM MyTable
-----------------------------------
ID Field1 Field2
1 Value1 Value2
Если это - SQL Server Microsoft, одна вещь, которую Вы могли бы сделать, использовать [dbcc checkident] (http://msdn.microsoft.com/en-us/library/ms176057 (SQL.90) .aspx)
Предположите, что у Вас есть единственная таблица, в которой Вы хотите переместить данные наряду с изменением нумерации первичных ключей. Для примера названием таблицы является ErrorCode. Это имеет два поля, ErrorCodeID (который является первичным ключом), и Описание.
-- Reset the primary key counter
dbcc checkident(ErrorCode, reseed, 7000)
-- Move all rows greater than 8000 to the 7000 range
insert into ErrorCode
select Description from ErrorCode where ErrorCodeID >= 8000
-- Delete the old rows
delete ErrorCode where ErrorCodeID >= 8000
-- Reset the primary key counter
dbcc checkident(ErrorCode, reseed, 8000)
С этим примером Вы будете эффективно перемещать все строки в другой первичный ключ и затем сбрасывать так следующую вставку, берет 8 000 идентификаторов.
Надежда это помогает немного!
Вы могли сделать это в следующих шагах:
Но поскольку другие сказали весь, что работа не нужна. Я склонен смотреть на первичные ключи типа идентификационных данных, как будто они были эквивалентны из указателей в C, я использую их, чтобы сослаться на другие объекты, но никогда не изменять доступа их явно