2017-04-24 53 views
0

在SQL列我有我想要一个SQL表像这样插入日期为从CSV

RegisterDate StoreID ProductID ProductType Quantity 
30.12.2013  1002 00000576 001   10 
1.1.2014  1002 00008577 001  20 
2.1.2014  1002 00002917 002  12 
3.1.2014  1002 00007542 003   1 
4.1.2014  1002 00000964 002   1 

在CSV数据,我使用Python来填充表。以下是我的代码:

import pymysql as MS 
import pandas as pd 

db = MS.connect(host="localhost",user="root",passwd="passwd",db="db") 
cursor = db.cursor() 
cursor.execute("create table IF NOT EXISTS sales (productID INT (25), registerDate DATE, storeID INT(5), productType INT (3), Quantity INT (100));") 

df = pd.read_csv('C:/Users/data.csv', encoding='latin-1') 
for i in range (len(df)): 
    date = pd.to_datetime(df['RegisterDate'][i], format='%d.%m.%Y') # Converting the field value to datetime 
    data = [int(df['ProductID'][i]), date, int(df['StoreID'][i]), int(df['ProductType'][i]), int(df['Quantity'][i]] 
    cursor.execute('INSERT INTO sales(productID, registerDate, storeID, productType, Quantity)' 'VALUES("%s", "%s", "%s", "%s", "%s" )', data) 

db.commit() 
cursor.close() 

但我收到以下错误:

Traceback (most recent call last): 
    File "C:/Users/PycharmProjects/testproject/database.py", line 17, in <module> 
    cursor.execute('INSERT INTO sales(productID, registerDate, storeID, productType, Quantity)' 'VALUES("%s", "%s", "%s", "%s", "%s" )', data) 
    File "C:\Python\Python35\lib\site-packages\pymysql\cursors.py", line 164, in execute 
    query = self.mogrify(query, args) 
    File "C:\Python\Python35\lib\site-packages\pymysql\cursors.py", line 143, in mogrify 
    query = query % self._escape_args(args, conn) 
    File "C:\Python\Python35\lib\site-packages\pymysql\cursors.py", line 118, in _escape_args 
    return tuple(conn.literal(arg) for arg in args) 
    File "C:\Python\Python35\lib\site-packages\pymysql\cursors.py", line 118, in <genexpr> 
    return tuple(conn.literal(arg) for arg in args) 
    File "C:\Python\Python35\lib\site-packages\pymysql\connections.py", line 821, in literal 
    return self.escape(obj, self.encoders) 
    File "C:\Python\Python35\lib\site-packages\pymysql\connections.py", line 814, in escape 
    return escape_item(obj, self.charset, mapping=mapping) 
    File "C:\Python\Python35\lib\site-packages\pymysql\converters.py", line 27, in escape_item 
    val = encoder(val, mapping) 
    File "C:\Python\Python35\lib\site-packages\pymysql\converters.py", line 110, in escape_unicode 
    return u"'%s'" % _escape_unicode(value) 
    File "C:\Python\Python35\lib\site-packages\pymysql\converters.py", line 73, in _escape_unicode 
    return value.translate(_escape_table) 
AttributeError: 'Timestamp' object has no attribute 'translate' 

我搜索了上面的错误,但没有相关的答案。我该如何填写其他栏目的日期?

+0

首先找出您正在使用的RDBMS。 – Strawberry

+0

我正在使用MySQL – muazfaiz

+0

顺便说一句,int关键字后面的括号里的小数字并不代表什么意思。 – Strawberry

回答

1

我会转换您datetime对象特定格式字符串中的python使用strftime('%Y-%m-%d')方法插入到MySQL:

data = [int(df['ProductID'][i]), date.strftime('%Y-%m-%d'), int(df['StoreID'][i]), int(df['ProductType'][i]), int(df['Quantity'][i]] 

这样你逝去的格式化为'%Y-%m-%d'一个字符串,这与MySQL的标准清晰度符合日期文字。

+0

我试过了,但现在我得到这个错误'pymysql.err.InternalError:(1292,“错误的日期值:''30 -12-2013''列'registerDate'在第1行)” – muazfaiz

+0

然后你必须有使用了不同于我建议的格式化字符串。 – Shadow

+0

我已经检查过我在SQL中插入的'data list'有字符串日期,但是为什么?我已经在这里转换成日期对象。所以它将对象转换成特定的格式'%Y-%m-%d',但是当我在列表中打印它的字符串时 – muazfaiz