2017-04-24 100 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