Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 29, 2015 14:20:34

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Сохраняю список программ в формате csv.

wmic /output:wmicbuild.csv product get InstallDate,InstallLocation,Name,Vendor,Version /format:csv
Далее хочу импортировать полученную информацию из csv в mysql
import csv
import MySQLdb
filepath = r"wmicbuild.csv"
mydb = MySQLdb.connect(host='localhost',
    user='login',
    passwd='password',
    db='test')
cursor = mydb.cursor()
with open(filepath, encoding='utf-16') as csvfile:
    csv_data = csv.reader(csvfile)
    strSQL = r"INSERT INTO csv(node,installdate,installlocation,name,vendor,version) VALUES(%s, %s, %s, %s, %s, %s)"
    for row in csv_data:
        #print(row)
        cursor.execute(strSQL, row)
    
#close the connection to the database.
mydb.commit()
cursor.close()
print ("Done")

В результате возникает ошибка
 query = query % args
TypeError: not enough arguments for format string

В файле “wmicbuild.csv” содержится следующая информация
Node,InstallDate,InstallLocation,Name,Vendor,Version
User,20151221,,Python 3.2.7 Add to Path (32-bit),Python Software Foundation,3.2.7.0
User,20140624,C:\Program Files\OpenXML-ODF Translator\,ODF Add-in for Microsoft Office,OpenXML/ODF Translator Team,4.0.5309.0
User,20151221,,Python 3.2.7 Documentation (32-bit),Python Software Foundation,3.2.7.0

Что я делаю не так?

Офлайн

#2 Дек. 29, 2015 15:18:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Для начала выполни команду напрямую:

cursor.execute(r"INSERT INTO csv(node,installdate,installlocation,name,vendor,version) VALUES(%s, %s, %s, %s, %s, %s)", ('1', '2', '3', '4', '5', '6'))



Отредактировано py.user.next (Дек. 29, 2015 15:18:41)

Офлайн

#3 Дек. 29, 2015 15:35:42

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Работает!

Офлайн

#4 Дек. 29, 2015 15:43:38

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

А может это быть из-за пустого списка в самом начале файла?
Это вывод с помощью команды #print(row)

[]
['Node', 'InstallDate', 'InstallLocation', 'Name', 'Vendor', 'Version']
['User', '20151221', '', 'Python 3.5.1 Add to Path (32-bit)', 'Python Software Foundation', '3.5.1150.0']
['User', '20140624', 'C:\\Program Files\\OpenXML-ODF Translator\\', 'ODF Add-in for Microsoft Office', 'OpenXML/ODF Translator Team', '4.0.5309.0']
['User', '20151221', '', 'Python 3.5.1 Documentation (32-bit)', 'Python Software Foundation', '3.5.1150.0']

Офлайн

#5 Дек. 29, 2015 16:52:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Moi5es
А может это быть из-за пустого списка в самом начале файла?
Ну да. В корректном csv-файле не должно быть пустых строк.



Офлайн

#6 Дек. 30, 2015 07:26:46

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Нашел ошибку! Во-первых, во всех файлах первой строчкой почему-то идет пустой список (его нужно игнорировать), во-вторых, в некоторых строках встречается название компании из двух и более слов через запятую (например Microsoft, Inc.,). “Увидев” запятую, скрипт воспринимает её как начало нового элемента. Тем самым количество элементов превышает число колонок в таблице БД. Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.

Офлайн

#7 Дек. 30, 2015 09:02:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

Moi5es
/format:csv
Вот эта часть должна гарантировать правильность формата файла.

Moi5es
первой строчкой почему-то идет пустой список
Пустая строка, наверное.

Moi5es
во-вторых, в некоторых строках встречается название компании из двух и более слов через запятую
Это всё тоже должна программа, выдающая csv-файл, делать (экранировать поле целиком).

Moi5es
Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.
Короче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.



Отредактировано py.user.next (Дек. 30, 2015 09:02:42)

Офлайн

#8 Дек. 30, 2015 09:57:29

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql

py.user.next
Короче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.
wmic - это штатная утилита Windows, поэтому с ней ничего не поделаешь. Уже делаю транслятор, который исправляет баги.
py.user.next, спасибо за помощь!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version