f8d8bdbcac3a61a7ba18b0f397aa56b3a6a8f3f5
4 from django
.db
.models
import get_models
, signals
5 from django
.conf
import settings
7 import auf
.django
.references
.models
9 def post_syncdb(sender
, **kwargs
):
10 """Création des vues vers datamaster."""
12 # On ne crée des vues que si on est sur une BD MySQL.
13 # L'attribut db.connection.vendor n'est présent qu'à partir de Django
15 if (hasattr(db
.connection
, 'vendor') and db
.connection
.vendor
!= 'mysql') or \
16 'mysql' not in db
.backend
.__name__
:
19 cursor
= db
.connection
.cursor()
21 # Vérifions qu'on a une BD qui s'appelle 'datamaster'
22 if not cursor
.execute("SHOW DATABASES LIKE 'datamaster'"):
25 # Déterminons la liste de tables de référence dans datamaster
26 cursor
.execute("SHOW TABLES IN datamaster LIKE 'ref\\_%%'")
27 datamaster_tables
= set(row
[0] for row
in cursor
)
29 # Déterminons la liste de tables que nous avons déjà et
30 # enlevons-les des tables de datamaster
31 cursor
.execute("SHOW FULL TABLES WHERE Table_type != 'VIEW'")
32 my_tables
= set(row
[0] for row
in cursor
)
33 datamaster_tables
.difference_update(my_tables
)
35 # On peut maintenant créer les vues
36 cursor
= db
.connection
.cursor()
37 for table
in datamaster_tables
:
38 print "Création d'une vue vers datamaster.%s" % table
40 'CREATE OR REPLACE VIEW `%s` AS SELECT * FROM datamaster.`%s`' % (table
, table
)
43 signals
.post_syncdb
.connect(post_syncdb
, sender
=auf
.django
.references
.models
)