Python Pandas to_sql,如何用主键创建表?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Pandas to_sql,如何用主键创建表?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1800字,纯文字阅读大概需要3分钟。
内容图文
![Python Pandas to_sql,如何用主键创建表?](/upload/InfoBanner/zyjiaocheng/890/1d77ef6d63f3487f90de312906ed67b2.jpg)
我想用Pandas的to_sql函数创建一个MySQL表,它有一个主键(在mysql表中有一个主键通常很好),如下所示:
group_export.to_sql(con = db, name = config.table_group_export, if_exists = 'replace', flavor = 'mysql', index = False)
但这会创建一个没有任何主键的表(甚至没有任何索引).
文档提到参数’index_label’与’index’参数结合使用可用于创建索引但不提及主键的任何选项.
解决方法:
免责声明:这个答案更具实验性和实用性,但也许值得一提.
我发现类pandas.io.sql.SQLTable已命名参数键,如果为其指定字段名称,则此字段将成为主键:
不幸的是,你不能只从DataFrame.to_sql()函数传递这个参数.要使用它你应该:
>创建pandas.io.SQLDatabase实例
engine = sa.create_engine('postgresql:///somedb')
pandas_sql = pd.io.sql.pandasSQL_builder(engine, schema=None, flavor=None)
>定义与pandas.io.SQLDatabase.to_sql()类似的函数,但附加* kwargs参数,该参数传递给在其中创建的pandas.io.SQLTable对象(我刚刚复制了原始的to_sql()方法并添加了* kwargs):
def to_sql_k(self, frame, name, if_exists='fail', index=True,
index_label=None, schema=None, chunksize=None, dtype=None, **kwargs):
if dtype is not None:
from sqlalchemy.types import to_instance, TypeEngine
for col, my_type in dtype.items():
if not isinstance(to_instance(my_type), TypeEngine):
raise ValueError('The type of %s is not a SQLAlchemy '
'type ' % col)
table = pd.io.sql.SQLTable(name, self, frame=frame, index=index,
if_exists=if_exists, index_label=index_label,
schema=schema, dtype=dtype, **kwargs)
table.create()
table.insert(chunksize)
>使用您的SQLDatabase实例和要保存的数据帧调用此函数
to_sql_k(pandas_sql, df2save, 'tmp',
index=True, index_label='id', keys='id', if_exists='replace')
我们得到类似的东西
CREATE TABLE public.tmp
(
id bigint NOT NULL DEFAULT nextval('tmp_id_seq'::regclass),
...
)
在数据库中.
PS当然,您可以使用Monkey-patch DataFrame,io.SQLDatabase和io.to_sql()函数来方便地使用此变通方法.
内容总结
以上是互联网集市为您收集整理的Python Pandas to_sql,如何用主键创建表?全部内容,希望文章能够帮你解决Python Pandas to_sql,如何用主键创建表?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。