【问题标题】:SQLite Python Blaze - Attempting to create a table after dropping a table of same name returns old schemaSQLite Python Blaze - 在删除同名表后尝试创建表返回旧模式
【发布时间】:2017-07-27 10:04:56
【问题描述】:

我试图弄清楚为什么当我尝试使用一组不同的列名创建表时,删除的表的架构会返回?

删除表后,我可以在 SQLite 资源管理器中确认该表已消失。一旦尝试通过 ODO 加载新文件,它就会返回错误“传入数据的列名与 SQL 表中现有 SQL 表名的列名不匹配”。然后我可以看到使用先前删除的模式在数据库中重新创建了同一个表!我在删除表后尝试了一个 VACUUM 语句,但仍然是同样的问题。

我可以使用不同的表名很好地创建表,但是对于为什么我不能使用我想使用的先前删除的表名完全困惑?

import sqlite3
import pandas as pd
from odo import odo, discover, resource, dshape

conn = sqlite3.connect(dbfile)
c = conn.cursor()

c.execute("DROP TABLE <table1>")
c.execute("VACUUM")

importfile = pd.read_csv(csvfile)

odo(importfile,'sqlite:///<db_path>::<table1'>)

ValueError: Column names of incoming data don't match column names of existing SQL table Names in SQL table:

【问题讨论】:

    标签: python python-2.7 sqlite blaze odo


    【解决方案1】:
    import sqlite3
    import pandas as pd
    from odo import odo, discover, resource, dshape
    
    conn = sqlite3.connect('test.db')
    cursor = conn.cursor();
    table = """ CREATE TABLE IF NOT EXISTS TABLE1 (
                                            id integer PRIMARY KEY,
                                            name text NOT NULL
                                        ); """;
    cursor.execute(table);
    
    conn.commit(); # Save table into database.
    
    cursor.execute(''' DROP TABLE TABLE1 ''');
    conn.commit(); # Save that table has been dropped.
    
    cursor.execute(table);
    conn.commit(); # Save that table has been created.
    conn.close();
    

    【讨论】:

    • 是的,记住提交更改会很有用!
    • 不幸的是,我太快将其勾选为答案。即使使用 conn.commit(),我实际上仍然遇到同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多