我试图做一些相当简单的事情,但是要么odo
坏了,要么我不理解数据形状在这个包的上下文中是如何工作的。
CSV文件:
email,dob
[email protected],1982-07-13
[email protected],1997-01-01
...
代码:
from odo import odo
import pandas as pd
df = pd.read_csv("...")
connection_str = "postgresql+psycopg2:// ... "
t = odo('path/to/data.csv', connection_str, dshape='var * {email: string, dob: datetime}')
错误:
AssertionError: datashape must be Record type, got 0 * {email: string, dob: datetime}
如果我试图直接从数据帧->Postgres访问,也是同样的错误:
t = odo(df, connection_str, dshape='var * {email: string, dob: datetime}')
还有一些事情不能解决这个问题:1)从CSV文件中删除头行,2)将
var
更改为数据帧中的实际行数。我在这里做错什么了?
最佳答案
connection_str
是否有表名?当我遇到一个类似的问题,但有一个sqlite数据库时,这个问题就解决了。
应该是这样的:
connection_str = "postgresql+psycopg2://your_database_name::data"
t = odo(df, connection_str, dshape='var * {email: string, dob: datetime}')
其中'connection_str'中的'data'是新表名。
另见:
python odo sql AssertionError: datashape must be Record type, got 0 * {...}
https://github.com/blaze/odo/issues/580