首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python将csv加载到空的SQL表中?

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

Stack Overflow用户
提问于 2019-08-01 23:01:09
回答 2查看 346关注 0票数 1

因此,我有一个我创建的空表(参见下面的代码),我需要使用python-sql连接从csv文件加载数据。在执行此操作时,需要替换html代码并更改为正确的数据类型(清理文件),最后将其加载到这个空的sql表中。

这是我写的代码,但是,如果没有任何success...when,我在SQL中检查表,它只返回一个空表:

Python代码:

代码语言:javascript
复制
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列作为时间戳)

EN

回答 2

Stack Overflow用户

发布于 2019-08-01 23:20:23

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

这是一张临时表吗?

2)您对您的查询的响应是什么?

代码会创建表吗?当您导入csv,然后写回相同的文件时,是否会产生您正在寻找的结果或崩溃?

票数 0
EN

Stack Overflow用户

发布于 2019-08-01 23:24:13

您可以像在SQL中一样编写查询,但是需要用python重写它们。Python需要将查询理解为python字符串,然后才能将其解析为sql。IE不使用'''包装语句。

这并未经过测试,但请尝试如下所示:

代码语言:javascript
复制
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)

它使用docstring将sql放在多行上,但您可能希望使用常规字符串。

以下是对pyodbc https://stackoverflow.com/a/43855693/4788717查询进行格式化的答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57311916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档