我正在从各种来源(csv,xls,json等)加载数据到Pandas数据框,我想生成语句来创建和填充SQL数据库与此数据。有人知道一种方法来做到这一点吗?
我知道Pandas有一个to_sql
函数,但那只适用于数据库连接,它不能生成字符串。
示例
我想要的是这样一个 Dataframe :
import pandas as pd
import numpy as np
dates = pd.date_range('20130101',periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
和一个函数,将产生这个(这个例子是PostgreSQL,但任何都可以):
CREATE TABLE data
(
index timestamp with time zone,
"A" double precision,
"B" double precision,
"C" double precision,
"D" double precision
)
9条答案
按热度按时间xqkwcwgp1#
如果您只需要'CREATE TABLE' sql代码(而不需要插入数据),可以使用pandas.io.sql模块的
get_schema
函数:一些注意事项:
reset_index
,因为它不包含索引kcrjzv8t2#
从 Dataframe 生成SQL创建语句
从 Dataframe 生成SQL创建语句
检查SQL
CREATE TABLE
语句字符串从 Dataframe 生成SQL INSERT语句
检查SQL
INSERT INTO
语句字符串yzckvree3#
插入语句解决方案
不确定这是否是最好的方法,但这比使用
df.iterrows()
更有效,因为df.iterrows()
非常慢。而且,这在正则表达式的帮助下处理了nan
值。q3qa4bjr4#
如果你想自己写这个文件,你也可以检索列名和数据类型,并建立一个字典来把panda数据类型转换成sql数据类型。
例如:
您可以使用INSERT INTO以相同的方式填充表。
gtlvzcf85#
单次插入查询解决方案
我没有找到适合我需要的以上答案。我想为一个 Dataframe 创建一个单插入语句,每一行作为值。这可以通过以下方式实现:
r6l8ljro6#
如果你只是想生成一个基于
pandas.DataFrame
的插入字符串,我建议使用@rup建议的批量sql插入语法。下面是我为此编写的function示例:
顺便说一下,它将
nan
/None
条目转换为NULL
,并且可以将常量column=value对作为关键字参数传递(请参见docstring示例中的status="APPROVED"
和address=None
参数)。通常,它的工作速度更快,因为任何数据库都要为单个插入做大量工作:检查约束、建立索引、刷新、写入日志等。这种复杂的操作可以由数据库在进行多合一操作时进行优化,而不是逐个调用引擎。
wpx232ag7#
我以用户@Jaris的帖子为例,进一步扩展了CREATE,使其适用于任何CSV
希望这是更简单的比替代答案和更多的Python!
cl25kdpy8#
这取决于您是否可以放弃生成SQL语句的中间表示形式;您也可以直接执行insert语句。
这工作得稍微好一点,因为有更少的混乱与字符串生成。
piwo6bdm9#
我使用的解决方案是使用SQLite3将 * Dataframe * 发送到 * 内存 * 中的DB。
然后,我转储DB,将语句写入 .sql 文件。
...只是为了演示,我创建了一个示例文件:
我们使用SQL Alchemy创建了一个 engine,这个连接将被 * panda * 用来把数据发送到临时内存,也被***SQLite3用来 * 转储database 的内容。
最后,我们指出输出文件的路径并执行 iterdump。
为了让生活更轻松,我在我维护的包中创建了一个函数,称为“traquitanas”,函数是安装包和使用函数所必需的: