Exigences
Il existe une table avec une quantité de données relativement importante, qui est mise à jour quotidiennement. Ses champs peuvent être configurés via le fichier de configuration XML, c'est-à-dire que les champs peuvent être différents à chaque fois. le tableau est créé. Lors de l'exécution en amont, il sera extrait du fichier source selon la configuration. Lors de l'étape d'entreposage, la table doit être construite en fonction de la configuration.
Solution
Écrivez un XML simple pour configurer les champs et les types requis pour lire les données correspondantes en amont et les stocker dans la base de données. Supprimez d'abord la table d'origine et créez une nouvelle table selon la. configuration
Fichier XML
name="top_query" db_name="evaluting_sys"> id query varchar(200) false query pv integer false pv avg_money integer false
Script de traitement
#!/usr/bin/python # -*- coding:utf-8 -*- #author: wklken #desc: use to read db xml config. #----------------------- #2012-02-18 created #---------------------- import sys,os from xml.dom import minidom, Node def read_dbconfig_xml(xml_file_path): content = {} root = minidom.parse(xml_file_path) table = root.getElementsByTagName("table")[0] #read dbname and table name. table_name = table.getAttribute("name") db_name = table.getAttribute("db_name") if len(table_name) > 0 and len(db_name) > 0: db_sql = "create database if not exists `" + db_name +"`; use " + db_name + ";" table_drop_sql = "drop " + table_name + " if exists " + table_name + ";" content.update({"db_sql" : db_sql}) content.update({"table_sql" : table_drop_sql }) else: print "Error:attribute is not define well! db_name=" + db_name + " ;table_name=" + table_name sys.exit(1) #print table_name, db_name table_create_sql = "create table " + table_name +"(" #read primary cell primary_key = table.getElementsByTagName("primary_key")[0] primary_key_name = primary_key.getElementsByTagName("name")[0].childNodes[0].nodeValue table_create_sql += primary_key_name + " INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," #print primary_key.toxml() #read ordernary field fields = table.getElementsByTagName("field") f_index = 0 for field in fields: f_index += 1 name = field.getElementsByTagName("name")[0].childNodes[0].nodeValue type = field.getElementsByTagName("type")[0].childNodes[0].nodeValue table_create_sql += name + " " + type if f_index != len(fields): table_create_sql += "," is_index = field.getElementsByTagName("is_index")[0].childNodes[0].nodeValue table_create_sql += ");" content.update({"table_create_sql" : table_create_sql}) #character set latin1 collate latin1_danish_ci; print content if __name__ == "__main__": read_dbconfig_xml(sys.argv[1])
Méthode impliquée
root = minidom.parse(xml_file_path) Obtenir l'objet dom
root.getElementsByTagName("table") Récupère la liste des nœuds en fonction de la balise
table.getAttribute("name") Récupère l'attribut
primary_key.getElementsByTagName("name") [0].childNodes[0 ].nodeValue Obtenez la valeur du nœud enfant (l'identifiant obtient l'identifiant)
Ce qui précède est le contenu de l'analyse Python xml[xml.dom]. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php). .cn) !