【发布时间】:2020-11-23 16:13:39
【问题描述】:
我试图弄清楚如何创建一个包含我在 MS SQL 数据库表中的 null 值的 csv 文件。现在我使用的脚本用''(空字符串)填充null值。我应该如何指示 csv Writer 保留空值?
源表示例
ID,Date,Entitled Key
10000002,NULL,805
10000003,2020-11-22 00:00:00,805
export_sql_to_csv.py
import csv
import os
import pyodbc
filePath = os.getcwd() + '/'
fileName = 'rigs_latest.csv'
server = 'ip-address'
database = 'db-name'
username = 'admin'
password = 'password'
# Database connection variable.
connect = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' +
server+';DATABASE='+database+';UID='+username+';PWD=' + password)
cursor = connect.cursor()
sqlSelect = "SELECT * FROM my_table"
cursor.execute(sqlSelect)
results = cursor.fetchall()
# Extract the table headers.
headers = [i[0] for i in cursor.description]
# Open CSV file for writing.
csvFile = csv.writer(open(filePath + fileName, 'w', newline=''),
delimiter=',', lineterminator='\r\n',
quoting=csv.QUOTE_NONE, escapechar='\\')
# Add the headers and data to the CSV file.
csvFile.writerow(headers)
csvFile.writerows(results)
运行上述脚本后的结果示例:
ID,Date,Entitled Key
10000002,,805
10000003,2020-11-22 00:00:00,805
我想保留null 值的主要原因是我想将该csv 文件转换为一系列插入SQL 语句,并针对Aurora Serverless PostgreSQL 数据库执行这些语句。数据库不接受 date 类型的空字符串并导致该错误:ERROR: invalid input syntax for type date: ""
【问题讨论】:
-
您希望 CSV 文件包含什么内容?无论如何,因为它是一个 text 文件,它只能包含字符串值,用分隔符(这里是逗号)分隔。但是如果你知道哪些列需要调整以及你想要哪些值而不是空字符串,那么在 Python 脚本中替换相关的空值很容易......
-
理想情况下,我想保留我的数据库中的
NULL值,这样当我使用该 csv 文件生成 SQL 语句时,NULL值也会进入它们的空字符串。我想我只需要将我的 MS SQL 数据库中的 NULLDATE类型列保存为NULL值而不是''
标签: python postgresql csv