首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在熊猫to_sql中使用SQLAlchemy删除表

不能在熊猫to_sql中使用SQLAlchemy删除表
EN

Stack Overflow用户
提问于 2016-08-09 00:06:19
回答 1查看 9.5K关注 0票数 1

我正在尝试删除一个现有的表,执行一个查询,然后使用熊猫to_sql函数重新创建该表。此查询在pgadmin中工作,但在这里不起作用。如果这是熊猫的错误,或者我的代码是错的,有什么想法吗?

特定错误是ValueError: Table 'a' already exists.

代码语言:javascript
运行
复制
import pandas.io.sql as psql
from sqlalchemy import create_engine

engine = create_engine(r'postgresql://user@localhost:port/dbname')

c = engine.connect()
conn = c.connection

sql = """
drop table a;
select * from some_table limit 1;
"""
df = psql.read_sql(sql, con=conn)
print df.head()
df.to_sql('a', engine)

conn.close()
EN

Stack Overflow用户

回答已采纳

发布于 2016-08-09 00:13:13

你为什么要这样做?有一个较短的方法:if_exists kwag在to_sql。试试这个:

代码语言:javascript
运行
复制
import pandas.io.sql as psql
from sqlalchemy import create_engine

engine = create_engine(r'postgresql://user@localhost:port/dbname')

c = engine.connect()
conn = c.connection

sql = """
select * from some_table limit 1;
"""
df = psql.read_sql(sql, con=conn)
print df.head()
# Notice how below line is different. You forgot the schema argument
df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')

conn.close()

根据文档的说法:

替换:如果存在表,则删除该表,重新创建它,并插入数据。

Ps。附加提示:

这是处理连接的更好方法:

代码语言:javascript
运行
复制
with engine.connect() as conn, conn.begin():
    sql = """select * from some_table limit 1"""
    df = psql.read_sql(sql, con=conn)
    print df.head()
    df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')

因为它确保连接始终关闭,即使程序退出时有错误。这对于防止数据损坏非常重要。此外,我只想用这个:

代码语言:javascript
运行
复制
import pandas as pd
...
pd.read_sql(sql, conn)

而不是你现在的做法。

所以,如果我在你的位置上写这段代码,它会是这样的:

代码语言:javascript
运行
复制
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine(r'postgresql://user@localhost:port/dbname')

with engine.connect() as conn, conn.begin():
    df = pd.read_sql('select * from some_table limit 1', con=conn)
    print df.head()
    df.to_sql('a', con=conn, schema=schema_name, if_exists='replace')
票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38840208

复制
相关文章

相似问题

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