【问题标题】:How to import datetime from csv python to sql?如何将日期时间从 csv python 导入到 sql?
【发布时间】:2020-12-16 02:11:36
【问题描述】:

我正在尝试使用 python 3.8 从 csv 文件中导入日期时间字符串,但运行代码时控制台返回错误:

ValueError: 时间数据'.Device[12].Measure is execution' 与格式'%Y-%m-%d %H:%M:%S'不匹配

CSV文件中的日期时间格式为:2020-12-09 00:00:00.8380

我正在使用代码:

import os
import shutil
import csv
import pyodbc
import pandas as pd
from datetime import datetime
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=MXESL10739\SQLEXPRESS;'
                      'Database=MITSF_1;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()
print ('good connection')
   
fields = []
new = []
path1 = 'C:\\Users\\sguerra\\Desktop\\MITSF1\\Controller 2020-12-09.log'
print ('good')
with open(path1, 'r') as csvfile: 
     # creating a csv reader object 
     csvreader = csv.reader(csvfile)   
   
     # extracting each data row one by one 
     for row in csvreader: 
             for col in row:
                         if col.startswith('20'):
                             new.append(col.split(' | '))
df = pd.DataFrame(new,columns = ['column1','column2','column3','Now'])
for row in df.itertuples():
        cursor.execute('''
                   insert into MITSF_1.dbo.Controller ([Column 1] ,[Column 2] ,[Column 3], [Now])
                   VALUES (?,?,?,?)
                   ''',
                   row.column1,
                   row.column2,
                   row.column3,
                   datetime.strptime(row.Now, '%Y-%m-%d %H:%M:%S').date()
                   )
conn.commit()

非常感谢您的帮助。

【问题讨论】:

  • 你为什么不使用 pandas pd.to_datetime() 以及为什么不进行完整插入而不是逐行插入?

标签: python pandas datetime


【解决方案1】:

我相信处理失败的特定代码行会更准确。

我建议在这种情况下,因为您正在迭代,所以使用pd.to_datetime(),它具有非常有用的参数infer_datetime_format,它可能会派上用场。如果您可以扩展更多信息,我们可能会找到更好的答案,但希望这就足够了:

pd.to_datetime(row.Now,infer_datetime_format=True).date()

【讨论】:

  • 谢谢,你试过这个修复吗?失败了吗?
  • 它失败了,它显示错误“ParserError: Unknown string format: .Device[12].Measure is execution”
  • 因此,错误似乎来自插入而不是解析...
  • 您好,问题是csv文件有4个十进制数字,SQL在列只有3个,我修剪了它,它工作了。非常感谢您
【解决方案2】:

问题是原始 CSV 文件的日期时间日期为 24 位,需要将其修剪为 23 位格式,这是因为在 SQL 中名为“现在”的列是 23 位格式。 过程很简单,你添加下一行:

row.Now[:23],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-29
    • 2023-02-18
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多