Найти - Пользователи
Полная версия: Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql
Начало » Python для новичков » Инвентаризация ПО с помощью wmic и сохранения результатов в таблицу mysql
1
Moi5es
Сохраняю список программ в формате 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

Что я делаю не так?
py.user.next
Для начала выполни команду напрямую:
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'))
Moi5es
Работает!
Moi5es
А может это быть из-за пустого списка в самом начале файла?
Это вывод с помощью команды #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']
py.user.next
Moi5es
А может это быть из-за пустого списка в самом начале файла?
Ну да. В корректном csv-файле не должно быть пустых строк.
Moi5es
Нашел ошибку! Во-первых, во всех файлах первой строчкой почему-то идет пустой список (его нужно игнорировать), во-вторых, в некоторых строках встречается название компании из двух и более слов через запятую (например Microsoft, Inc.,). “Увидев” запятую, скрипт воспринимает её как начало нового элемента. Тем самым количество элементов превышает число колонок в таблице БД. Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.
py.user.next
Moi5es
/format:csv
Вот эта часть должна гарантировать правильность формата файла.

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

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

Moi5es
Также встретил еще одну ошибку: некоторые символы требуют кодировку “latin-1”.
Короче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.
Moi5es
py.user.next
Короче, с программой, которая делает файл, разберись. Либо замени её, либо сделай транслятор, который исправляет баги после неё, корректируя csv-файл.
wmic - это штатная утилита Windows, поэтому с ней ничего не поделаешь. Уже делаю транслятор, который исправляет баги.
py.user.next, спасибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB