如何使用python将csv加载到一个空的SQL表中?

1 人关注

所以,我有一个我创建的空表(见下面的代码),我需要使用python-sql连接从一个csv文件中加载数据。当我这样做的时候,我需要替换html代码,改变为正确的数据类型(清理文件),最后将其加载到这个空的sql表中。

这是我写的代码,但是,没有任何成功......当我在SQL中检查该表时,它只是返回一个空表。

Python code:

import csv
with open ('UFOGB_Observations.csv', 'r') as UFO_Obsr:
    ## Write to the csv file, to clean it and change the html codes:
    with open ('UFO_Observations.csv', 'w') as UFO_Obsw:
        for line in UFO_Obsr:
            line = line.replace('&#44', ',') 
            line = line.replace('&#39', "'")
            line = line.replace('&#33', '!')
            line = line.replace('&', '&')
            UFO_Obsw.write(line) 
##To Connect Python to SQL:
import pyodbc
print('Connecting...')
conn = pyodbc.connect('Trusted_Connection=yes', driver = '{ODBC Driver 13 for SQL Server}', server = '.\SQLEXPRESS', database = 'QA_DATA_ANALYSIS')
print('Connected')
cursor = conn.cursor()
print('cursor established')
cursor.execute('''DROP TABLE IF EXISTS UFO_GB_1;
CREATE TABLE UFO_GB_1 (Index_No VARCHAR(10) NOT NULL, date_time VARCHAR(15) NULL, city_or_state VARCHAR(50) NULL, 
country_code VARCHAR(50) NULL, shape VARCHAR (200) NULL, duration VARCHAR(50) NULL, 
date_posted VARCHAR(15) NULL, comments VARCHAR(700) NULL);
print('Commands succesfully completed')
#To insert that csv into the table:
cursor.execute('''BULK INSERT QA_DATA_ANALYSIS.dbo.UFO_GB_1
FROM 'F:\GSS\QA_DATA_ANALYSIS_LEVEL_4\MODULE_2\Challenge_2\TASK_2\UFO_Observations.csv'
WITH ( fieldterminator = '', rowterminator = '\n')''')
conn.commit()
conn.close()

当我输入SELECT * FROM table时,我希望看到一个包含所有1900多条记录的表,并且有正确的数据类型(即date_time和date_posted列为时间戳)。

python
sql-server
csv
Vanessa_C
Vanessa_C
发布于 2019-08-01
2 个回答
Griffin
Griffin
发布于 2019-08-01
0 人赞同

(提前道歉。新来的,所以不允许评论。)

1) 你为什么每次都要创建表?这是否意味着这是一个临时表?

2)你的询问得到什么回应?

3)当你把任务分解成几个部分时会发生什么? 代码会创建表吗? 如果表已经存在,你只运行插入数据的代码,它是否工作?当你导入csv,然后写回同一个文件时,会产生你想要的结果还是崩溃?如果你写到一个不同的文件,然后再导入这个文件呢?

嗨!1)不,"与open....等 "的代码只是为了创建csv文件......这部分代码实际上工作正常。创建表的代码(SQL的东西)只是为了创建空表,这也能正常工作......但是将csv加载到空表中是我遇到问题的部分,因为2)它根本没有返回任何行...... 3) 我已经尝试了我能想到的所有可能的方法,但我得到了无数的错误...我不知道它们是什么意思,因为我是编码新手,真的:(
发布错误。它可以帮助了解问题所在。
你好!我不得不发表一个 "答案",因为它不让我在评论中发表错误(字符数太大)。
ryati
ryati
发布于 2019-08-01
0 人赞同

你像在SQL中那样写你的查询,但你需要在Python中重写它们。Python需要将查询理解为一个Python字符串,然后将其解析为sql。IE不要用 ''' 来包装语句。

This is not tested, but try something like this:

bulk_load_sql = """
BULK INSERT QA_DATA_ANALYSIS.dbo.UFO_GB_1
FROM 'F:\GSS\QA_DATA_ANALYSIS_LEVEL_4\MODULE_2\Challenge_2\TASK_2\UFO_Observations.csv'
WITH ( fieldterminator = '', rowterminator = '\n')
cursor.execute(bulk_load_sql)