У меня есть скрипт на Python, который выполняет функцию fetchall ():
connection = pymssql.connect(host='host', user='user', password='pw', database='database', as_dict=True)
cursor = connection.cursor()
cursor.execute("EXEC SPname")
data=cursor.fetchall()
Моя проблема в том, что cursor.fetchall () возвращает True или Falses (и другие столбцы с другими значениями, пример выше), но в базе данных значение бит 1 или 0, а при экспорте в CSV он помещает True или False, и я хотите 1 или 0.
Пример данных, возвращаемых в SQL:
ID Price Price2 Price3 Active Opened Sent Enable
1 12234.09 1111.09 3444.36 1 1 1 0
Можно использовать int()
Бывший:
print(int(True))
print(int(False))
Выход:
1
0
Вам не нужно изменять SP, вместо этого измените значение bool прямо перед записью в файл csv.
Правильно, но это означает, что я делаю: a= csv.writer(fp, delimiter=';') for line in data: line["mycolumn1"] = int(line["mycolumn1"]) line["mycolumn2"] = int(line["mycolumn2"]) line["mycolumn3"] = int(line["mycolumn3"]) a.writerows(line)
И это занимает много времени, и если бы у меня было новое битовое значение в SP, я должен был бы добавить еще одно условие в скрипт
Можете выложить образец data
?
line = [True, 12234.09, 1111.09, 3444.36, True, True, True, False] print( [int(i) if isinstance(i, bool) else i for i in line] )
?
fetchall
возвращает список кортежей или словарей. Самый простой способ преобразовать их в целые числа - сопоставить метод int
с этим списком:
data_in_integer_form = map(int, data)
Спасибо за вашу помощь, но возвращаемые данные не только логические, но и десятичные, строковые и т. д.
Что ж, это другой вопрос, чем тот, который был задан в первую очередь. Вы сказали, что запрос возвращает True и False, а не десятичные дроби и строки.
Спасибо за ответ и помощь. Проблема в том, что SP возвращает несколько столбцов, в данном случае 88, и я не хочу явно указывать их, потому что у него много столбцов, и мне нужно что-то динамическое, потому что, если я изменю SP, чтобы вернуть еще один столбец, я этого не сделаю. хотите изменить сценарий, чтобы добавить столбец. Следующая цель: сделайте следующее:
a= csv.writer(fp, delimiter=';') for line in data: a.writerows(line)