Форматировать список Python для сценария SQL? - PullRequest
1 голос
/ 30 ноября 2009

У меня есть список, который нужно отформатировать в 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'],

Для сценария SQL, как это:

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)

Это у меня есть попытка

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()

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

В принципе, это должно работать

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

результат

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)

Отрегулируйте его, если есть небольшая разница, зависит от ваших потребностей.

ps: я намеренно изменил list на list1 в своем коде, потому что переопределение встроенной функции не очень хорошая идея.

1 голос
/ 30 ноября 2009
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

Самый простой и уродливый способ выполнить работу:

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)

Примечание. Я убрал '\ n' после 0 (измените его соответствующим образом, если это необходимо). Это нормально для одноразовых скриптов. Для более серьезных отчетов и конверсий посмотрите на некоторые библиотеки шаблонов, чтобы разделить ваши данные и представление.

0 голосов
/ 30 ноября 2009

Технически довольно легко взять список и преобразовать его в sql вручную, но .... вы могли бы рассмотреть возможность проверки SQLAlchemy http://www.sqlalchemy.org. Это действительно великолепно. Он выполнит все ваши преобразования из объектов Python в строки таблицы базы данных и сможет извлечь объекты Python из таблиц.

Вы можете делать такие вещи:

# 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...