2009-11-30 3 views
1

J'ai besoin de liste pour être le format à SQL scripteMettre en forme la liste Python au script SQL?

list = 
    [['11', ' 0', " 'MMB'", " '2 MB INTERNATIONAL'", ' NULL', ' NULL', ' 0\n'], 
    ['12', ' 0', " '3D STRUCTURES'", " '3D STRUCTURES'", ' NULL', ' NULL', ' 0\n'], 
    ['13', ' 0', " '2 STRUCTURES'", " '2D STRUCTURES'", ' NULL', ' NULL', ' 0\n'], 

vers un script SQL comme ceci:

INSERT INTO `Tbl_ABC` VALUES (11, 0, 'MMB', '2 MB INTERNATIONAL', NULL, NULL, 0) 
INSERT INTO `Tbl_ABC` VALUES (12, 0, '3D STRUCTURES', '3D STRUCTURES', NULL, NULL, 0) 
INSERT INTO `Tbl_ABC` VALUES (13, 0, '2 STRUCTURES', '2D STRUCTURES', NULL, NULL, 0) 

Ce que j'ai essayer

import pickle 
import re 
#RX = re.compile(r'^.*?\(\d+,\s0,.*\s0\)\s*$') 

outfile = open('destination.sql', 'wb') 
data = [] 
for ln in open('source.sql', 'r').xreadlines(): 
    replace1 = ln.replace("INSERT INTO `Tbl_ABC` VALUES (", "") 
    replace2 = replace1.replace(")", "") 
    list_replace = replace2.split(',') 
    data.append(list_replace) 
destinationdata = [d for d in data if d[1] == ' 0' and d[6]==' 0\n']#print '%s ,%s' % (list_replace[1], list_replace[6]) 

    #start write line to destination.sql 
    #if RX.match(ln):   

pickle.dump(destinationdata, outfile) 
outfile.close() 

Merci pour votre aide!

+0

je ne peux pas comprendre les commentaires sarcastiques et réponses. On dirait une question valable, peut-être manquer de prose anglaise. Une question beaucoup plus logique que beaucoup d'autres ici sur SO –

+0

@eliben: la question initiale demandait simplement un script python pour faire une tâche spécifique. Si Python avait montré qu'ils avaient déjà essayé de le faire et qu'ils cherchaient de l'aide, je ne pouvais pas être plus d'accord. – Russell

Répondre

1
Iterate over each element in the list 
    Unpack the element (which is also a list) into its fields 
    Generate a SQL line from these fields 

Le plus simple et le plus laid façon qui obtient tout le travail est:

list = [ 
    ['11', ' 0', " 'MMB'", " '2 MB INTERNATIONAL'", ' NULL', ' NULL', ' 0'], 
    ['12', ' 0', " '3D STRUCTURES'", " '3D STRUCTURES'", ' NULL', ' NULL', ' 0'], 
    ['13', ' 0', " '2 STRUCTURES'", " '2D STRUCTURES'", ' NULL', ' NULL', ' 0']] 

for elem in list: 
    print 'INSERT INTO \'Tbl_ABS\' VALUES (%s, %s, %s, %s, %s, %s, %s)' % tuple(elem) 

Notez que je nettoie le « \ n » après 0 (adapter en conséquence si elle est nécessaire là-bas). Ceci est OK pour les scripts uniques. Pour des rapports et des conversions plus sérieux, consultez certaines bibliothèques de modèles pour séparer vos données et votre présentation.

+0

Merci beaucoup @eliben – kn3l

1

Fondamentalement, cela devrait fonctionner

print "\n".join(["INSERT INTO `Tbl_ABC` VALUES ("+",".join(x).strip()+")" for x in list1]) 

résultat

INSERT INTO `Tbl_ABC` VALUES (11, 0, 'MMB', '2 MB INTERNATIONAL', NULL, NULL, 0) 
INSERT INTO `Tbl_ABC` VALUES (12, 0, '3D STRUCTURES', '3D STRUCTURES', NULL, NULL, 0) 
INSERT INTO `Tbl_ABC` VALUES (13, 0, '2 STRUCTURES', '2D STRUCTURES', NULL, NULL, 0) 

Adjust s'il y a une différence mineure, dépend de vos besoins.

ps: J'ai changé intentionnellement liste à list1 dans mon code, parce que remplaçant fonction intégrée est pas une bonne idée.

+0

@ S.Mark Merci beaucoup .. – kn3l

+0

Juste une ligne que vous donnez les moyens. :) – kn3l

0

Techniquement, il est assez facile de prendre une liste et de la convertir en sql à la main, mais .... vous pourriez envisager de vérifier SQLAlchemy http://www.sqlalchemy.org. C'est je me sens vraiment superbe. Il effectuera toutes vos conversions à partir d'objets Python vers des lignes de table de base de données et pourra récupérer des objets python à partir des tables.

Vous pouvez faire des choses comme ceci:

# retrieve each row from the company table and print it :-O 
for company in session.query(Company): 
    print company.name + " " + company.address 

# add a new company to the company table: 
company = Company("Fred Flintstone", "The Quarry") 
session.add(company) 
session.commit() 
+0

merci pour votre info.AnyWhere ce que je fais est de faire une migration de base de données de l'accès MS aux données SQL.get d'accès et d'insérer à MySQL avec conditions. :) – kn3l

Questions connexes