首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas to_sql,如何创建一个带有主键的表?

Pandas to_sql,如何创建一个带有主键的表?
EN

Stack Overflow用户
提问于 2015-06-16 12:18:44
回答 5查看 78.5K关注 0票数 48

我想用Pandas的MySQL函数创建一个to_sql表,该表有一个主键(通常在mysql表中有一个主键比较好),如下所示:

代码语言:javascript
运行
复制
group_export.to_sql(con = db, name = config.table_group_export, if_exists = 'replace', flavor = 'mysql', index = False)

但是这会创建一个没有任何主键的表(甚至没有任何索引)。

文档中提到了参数'index_label‘,它与' index’参数结合在一起可以用来创建索引,但是没有提到主键的任何选项。

文档

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-06-25 08:29:44

免责声明:这个答案更多的是实验性的,而不是实用性的,但也许值得一提。

我发现类pandas.io.sql.SQLTable已经命名为参数key,如果您为它指定了字段的名称,那么这个字段将成为主键:

不幸的是,您不能只从DataFrame.to_sql()函数传递这个参数。要使用它,您应该:

  1. 创建pandas.io.SQLDatabase实例 engine =sa.create_engine(‘postgresql://somedb’) pandas_sql = pd.io.sql.pandasSQL_builder(engine,schema=None,flavor=None)
  2. 定义类似于pandas.io.SQLDatabase.to_sql()的函数,但使用附加的*kwargs参数,该参数传递给在其中创建的pandas.io.SQLTable对象(我刚刚复制了原始的to_sql()方法并添加了*kwargs): def to_sql_k(self,frame,name,if _ is =‘fail’,index=True,index_label=None,schema=None,chunksize=None,dtype=None,**kwargs):如果dtype不是None:从sqlalchemy.types import to_instance,TypeEngine for dtype.items(),my_type in dtype.items():如果不是isinstance(to_instance(my_type),TypeEngine):self (‘类型%s不是SQLAlchemy’‘类型’%col‘)表=pd.io.sql.SQLTable(名称、自我、frame=frame、index=index、if_exists=if_exists、index_label=index_label、schema=schema、dtype=dtype,**kwargs) table.create() table.insert(块状)
  3. 使用您的SQLDatabase实例和您想要保存的数据调用此函数 to_sql_k(pandas_sql,df2save,'tmp',index=True,index_label='id',key=‘id’,if_if=‘index=True’)

我们得到了类似于

代码语言:javascript
运行
复制
CREATE TABLE public.tmp
(
  id bigint NOT NULL DEFAULT nextval('tmp_id_seq'::regclass),
...
)

在数据库里。

当然,您可以使用猴子补丁DataFrameio.SQLDatabaseio.to_sql()函数来方便地使用这个解决方法。

票数 30
EN

Stack Overflow用户

发布于 2016-11-23 17:30:58

只需添加主键后,上传表与熊猫。

代码语言:javascript
运行
复制
group_export.to_sql(con=engine, name=example_table, if_exists='replace', 
                    flavor='mysql', index=False)

with engine.connect() as con:
    con.execute('ALTER TABLE `example_table` ADD PRIMARY KEY (`ID_column`);')
票数 68
EN

Stack Overflow用户

发布于 2021-09-27 17:19:48

对于大熊猫0.15,至少对于某些口味,您可以使用参数dtype来定义主键列。您甚至可以以这种方式激活AUTOINCREMENT。对于sqlite3,如下所示:

代码语言:javascript
运行
复制
import sqlite3
import pandas as pd

df = pd.DataFrame({'MyID': [1, 2, 3], 'Data': [3, 2, 6]})
with sqlite3.connect('foo.db') as con:
    df.to_sql('df', con=con, dtype={'MyID': 'INTEGER PRIMARY KEY AUTOINCREMENT'})
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30867390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档