【发布时间】:2019-07-23 16:58:48
【问题描述】:
我有一个包含 2000 行和 3 列的 Int、String 和 String 类型的 CSV 文件。我正在尝试编写一个程序来创建一个表并将我的 CSV 文件 rowsxcolumns 附加到表中。这一切似乎都有效,除了一个项目。该项目的第一列和第三列已附加,但第二列为空。
控制台上没有显示错误,我在调用 to_sql 函数之前尝试将数据打印到控制台,它显示了一个丢失的项目就好了。我的 CSV 文件也使用分隔符。该项目最初的格式不正确,因此在分隔我的所有行之后,我必须自己专门分隔该单行 - 我认为这可能导致问题?所有其他行和列都很好。
这是我的代码:
import sqlite3
import pandas as pd
from pandas import DataFrame
connection = sqlite3.connect('data.sqlite')
c = connection.cursor()
c.execute('''CREATE TABLE test(val1 int, val2 varchar(255), val3 varchar(255))''')
connection.commit()
col_names = ["val1", "val2", "val3"]
read_clients = pd.read_csv(r'thefile.csv', encoding='utf-16', names=col_names, sep='\t')
read_clients.to_sql('test', connection, if_exists='append', index = false, schema='test')
connection.commit()
没有消息打印到控制台。
【问题讨论】:
-
read_clients DataFrame 在 read_clients.to_sql() 之前是否看起来应有的样子?
-
@braintho 是的,我打印了数据框,它正确地显示了指定列下的数据。即使我只打印一个我遇到问题的项目,它看起来也很好。它就在 to_sql() 函数调用之后。除了那一项之外,一切都很好......
-
那么你对 csv 或 DataFrame 没有问题。该问题必须与表定义有关。 DataFrame 中的数据类型是否与 sqlite 表中的数据类型相关?您是否有任何长度超过 255 个字符的字符串?那就是我开始寻找的地方。
-
@braintho 哇,这完全有道理,因为该项目的 val3 超过 255 个字符,我什至没有想到这一点。但是,val2 只有 2 个字符,而 val3 是 532 个字符。 val3 是否可能使 val2 无效?
-
我明白了。有道理。
标签: python sql python-3.x pandas csv