3
3
from south .db import db
4
4
from south .v2 import DataMigration
5
5
from django .db import models
6
+ from lxml import etree
6
7
from editorsnotes .main .models import Document
7
8
8
9
class Migration (DataMigration ):
9
10
10
11
def forwards (self , orm ):
11
12
"Write your forwards methods here."
12
13
# Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
14
+ digest_update_query = """
15
+ UPDATE main_document
16
+ SET description_digest = %s
17
+ WHERE id = %s
18
+ """
13
19
for document in orm ['main.Document' ].objects .all ():
14
- digest = Document . hash_description ( document . description )
15
- document . description_digest = digest
16
- document .save ( )
20
+ db . execute ( digest_update_query ,
21
+ params = [ Document . hash_description ( document . description ),
22
+ document .id ] )
17
23
18
24
duplicates_query = """
19
25
SELECT project_id, description_digest, COUNT(description_digest) as occurences
@@ -34,9 +40,14 @@ def forwards(self, orm):
34
40
last_el .tail += appended_text
35
41
else :
36
42
last_el .text += appended_text
37
- document .description = description
38
- document .description_digest = Document .hash_description (description )
39
- document .save ()
43
+ update_query = """
44
+ UPDATE main_document
45
+ SET description = %s, description_digest = %s
46
+ WHERE id = %s
47
+ """
48
+ db .execute (update_query , params = [etree .tostring (description ),
49
+ Document .hash_description (description ),
50
+ document .id ])
40
51
remaining_duplicates = db .execute (duplicates_query )
41
52
assert not len (remaining_duplicates ), "Still duplicates"
42
53
0 commit comments