【发布时间】:2019-10-07 10:53:53
【问题描述】:
我目前正在编写一个程序,该程序将从 Excel 电子表格中获取数据并将其插入到我在程序中创建的 sql server 表中。
我之前已将 datetime 列指定为 nvarchar(250) 以使整个程序正常工作,但是当我将其更改为 datetime 时,数据输入到了错误的列中?其余代码也适用于 nvarchar 数据类型。
import pyodbc
connection_string = r'connection_string'
data = 'file_path'
conn = pyodbc.connect(connection_string)
cur = conn.cursor()
createtable = """
create table table1(
ID Int NULL,
Date datetime(250) NULL,
City nvarchar(250) NULL,
Country nvarchar(250) NULL,
Image nvarchar(250) NULL,
Length nvarchar(250) NULL,
Date_Of_capture nvarchar(250) NULL,
Comments nvarchar(1000) NULL
)"""
truncatetable = """truncate table table1"""
with open(data) as file:
file.readline()
lines = file.readlines()
if cur.tables(table="table1").fetchone():
cur.execute(truncatetable)
for line in lines:
cols = line.split(',')
cols = line.replace("'", "")
sql = "INSERT INTO table1 VALUES({}, '{}', '{}', '{}', '{}', '{}','{}','{}')".format(cols[0], cols[1],cols[2], cols[3], cols[4], cols[5], cols[6], cols[7])
cur.execute(sql)
else:
cur.execute(createtable)
for line in lines:
cols = line.split(',')
sql = "INSERT INTO table1 VALUES({}, '{}', '{}', '{}', '{}', '{}','{}','{}')".format(cols[0], cols[1],cols[2], cols[3], cols[4], cols[5], cols[6], cols[7])
cur.execute(sql)
conn.commit()
conn.close()
我希望日期列显示为日期时间数据类型,同时包含在一个列中,但是它会更改表格,以便所有列都不正确并且日期的每个数字都在不同的列中?
非常感谢任何帮助。谢谢。
【问题讨论】:
-
请从输入和输出中添加一些数据。
-
我必须假设您的
create table语句没有被执行,因为datetime(250)肯定会抛出异常。另外,请阅读参数化查询和edit你的问题,向我们展示lines的样子。 -
抱歉,我不知道如何显示数据样本?有什么建议吗?
-
您不能
open处理二进制格式类型(.xls、.xlsx、.xlsm、.xlsb)的 Excel 文件。很可能,您的数据是 txt 或 csv,它们都不是 Excel 文件。 -
@Parfait - 如果安装了 Office,Windows 会将 .csv 与 Excel 相关联,因此在这种情况下,人们认为 .csv 是“Excel 文件”是可以原谅的。 (“好吧,我双击该文件,它会在 Excel 中打开……”)
标签: python sql sql-server pyodbc