Python Pandas write_frame删除sqlite表

Python Pandas write_frame删除sqlite表,python,sqlite,pandas,Python,Sqlite,Pandas,当尝试用Pandasdataframe的内容覆盖sqlite表时,Pandas会删除该表,但在尝试插入之前不会重新创建该表 下面是一个最低限度的工作示例: import sqlite3 as sq import pandas as pd import pandas.io.sql as pd_sql d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009], 'flavour':['

当尝试用Pandas
dataframe
的内容覆盖sqlite表时,Pandas
会删除该表,但在尝试插入之前不会重新创建该表

下面是一个最低限度的工作示例:

import sqlite3 as sq
import pandas as pd
import pandas.io.sql as pd_sql

d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009], 
                  'flavour':['strawberry','strawberry','banana','banana',
                  'strawberry','strawberry','banana','banana'],
                  'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
                  'sales':[10,12,22,23,11,13,23,24]})

# Connect to the database (create if necessary)                  
conn = sq.connect('mydb')

# Create the table 'mytable' if necessary
if not pd_sql.table_exists('mytable', conn, 'sqlite'):
    pd_sql.write_frame(d, 'mytable', conn)

# Change some data    
d['sales'][d.sales==24] = 25

# Confirm the table exists
print "Table 'mytable' exists:"
print pd_sql.table_exists('mytable', conn, 'sqlite')

# Get some data from the table
cur = pd_sql.execute("SELECT DISTINCT flavour FROM mytable", conn)
print "Here's the data to prove the table exists:"
print cur.fetchall()

try:
    print "Attempting write_frame..."
    pd_sql.write_frame(d, 'mytable', conn, if_exists='replace')
except sq.OperationalError as e:
    print "sq.OperationalError is: " + str(e)
    print pd_sql.table_exists('mytable', conn, 'sqlite')
    conn.close()
运行此脚本将产生以下输出:

Table 'mytable' exists:
True
Here's the data to prove the table exists:
[(u'banana',), (u'strawberry',)]
Attempting write_frame...
sq.OperationalError is: no such table: mytable
Table 'mytable' exists after write_frame:
False
这看起来像熊猫身上的虫子。有人能证实这一点吗

谢谢你一如既往,
Rob

在对原始帖子的评论中,这已经被证实是熊猫中已知的一个bug

在我看来,这一解决办法还可以:

pd_sql.uquery("DELETE FROM mytable", conn)
pd_sql.write_frame(d, 'mytable', conn, if_exists='append')

这个问题似乎离题了,因为它是一个bug报告(所以应该发布)。@AndyHayden这是一样的吗@Jeff看起来是的,不要认为它被合并了,会在SQLAlchemy的东西完成后解决。对不起,先生们,我不相信我能找到一个真正的bug!我将发布我一直用作此问题“答案”的变通方法。