【问题标题】:How does Pandas to_sql determine what dataframe column is placed into what database field?Pandas to_sql 如何确定将哪个数据框列放入哪个数据库字段?
【发布时间】:2016-04-18 16:43:33
【问题描述】:

我目前正在使用 Pandas to_sql 将大型数据框放入 SQL 数据库。我正在使用 sqlalchemy 来连接数据库,该过程的一部分是定义数据库表的列。

我的问题是,当我在数据框上运行 to_sql 时,它如何知道数据框中的哪一列进入数据库中的哪个字段?它是在查看数据框中的列名并在数据库中查找相同的字段吗?是变量的顺序吗?

这里有一些示例代码以方便讨论:

engine = create_engine('sqlite:///store_data.db')
meta = MetaData()

table_pop = Table('xrf_str_geo_ta4_1511', meta, 
    Column('TDLINX',Integer, nullable=True, index=True),
    Column('GEO_ID',Integer, nullable=True),
    Column('PERCINCL', Numeric, nullable=True)
)

meta.create_all(engine)

for df in pd.read_csv(file, chunksize=50000, iterator=True, encoding='utf-8', sep=',')
    df.to_sql('table_name', engine, flavor='sqlite', if_exists='append', index=index)

有问题的数据框有 3 列 TDLINX、GEO_ID 和 PERCINCL

【问题讨论】:

  • 你的 df.to_sql 命令运行良好,除了 index=index 的东西。它一直给我某种索引错误,直到我猜测使用 index=False 并且它像冠军一样工作。我也根本没有使用“风味”参数。非常感谢

标签: python database pandas sqlite sqlalchemy


【解决方案1】:

答案确实是您所建议的:它正在查看列名。所以匹配列名很重要,顺序无关紧要。

为了完全正确,pandas 不会实际检查这一点。 to_sql 在后台执行的操作是执行插入语句,其中要插入的数据作为 dict 提供,然后由数据库驱动程序来处理。
这也意味着 pandas 不会检查 dtypes 或列数(例如,如果不是数据库的所有字段都作为数据帧中的列存在,则这些行将在数据库中填充这些行的默认值)。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2011-12-27
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2021-01-12
    • 2018-07-28
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多