【问题标题】:Inserting pandas df into sqlite3 inserts running text, not columns将 pandas df 插入 sqlite3 会插入运行文本,而不是列
【发布时间】:2020-08-23 19:41:50
【问题描述】:

我有一个 pandas 数据框,我想插入到 sqlite3 数据库中(用 python 3.6+ 编写)。

但是,当我将数据插入表中时,它显示为一个文本文件,其中的文本是连续写入的。我尝试将数据库文件中的文本复制/粘贴到 Stackoverflow 上的此处,但 Stackoverflow 说尝试提交时出错。作为一个备用数据点,当我打开 Sublime Text 并从数据库中复制/粘贴文本时,唯一粘贴的文本是:

SQLite 格式 3

所以,我在下面粘贴了数据库中文本的屏幕截图。看起来 Stackoverflow 不喜欢那些不寻常的问号字符。

我将 pandas 数据帧传递到 sqlite3 的代码如下。请注意,我只是在此处创建表(尚未插入数据)并且仍然获得此表型。

cols = ["name", "website", "phone", "address", "city"]
df = pd.DataFrame(columns = cols)

conn = sqlite3.connect('TestDB2.db')
c = conn.cursor()

c.execute("""
        CREATE TABLE STUDENTS(
            id integer PRIMARY KEY, 
            name text, 
            age integer,
            city text,
            country text
        )""")
conn.commit()

dfObj.to_sql('STUDENTS', conn, if_exists='replace', index = False)

pandas 数据框在 python 中和写入 excel 文件时看起来不错。我是 sqlite3 世界的新手,但熟悉 postgres。任何帮助将不胜感激!

【问题讨论】:

  • variable text 的重复有问题;我还没有测试过 Postgres 中的功能,但是你要么创建大约十几个同名的列,要么创建一个其定义不断被覆盖的列(你可能最终只得到一个类型为“文本”的“变量”列)。
  • 截图很不清楚,总体来说screenshots are strongly discouraged。如果有私人信息,请创建一个显示类似行为的示例,而只使用虚拟信息。
  • 没有可以提供帮助的示例数据框。如上所述,在私人信息的情况下,使用具有其他相同行为的虚拟信息。另请参阅有关创建 minimal reproducible example 的信息。
  • 好的,好建议。我更新了虚拟信息。但是,我无法从数据库中复制/粘贴文本,因为 stackoverflow 不喜欢这些字符。所以,我上传了一张更清晰的截图。
  • sqlite3 数据库不是文本文件。这里的结果是使用文本编辑器打开 sqlite 数据库时得到的结果。使用命令行sqlite3 或一些工具(我最喜欢的DB browser for sqlite)来检查数据库内容。从发布的代码中不清楚dfObj 是什么。 to_sql 用于插入数据。

标签: python database pandas sqlite


【解决方案1】:

正如@DinoCoderSaurus 所说:

sqlite3 数据库不是文本文件。这里的结果是使用文本编辑器打开 sqlite 数据库时得到的结果。使用命令行sqlite3 或一些工具(我最喜欢的DB browser for sqlite)来检查数据库内容。从发布的代码中不清楚dfObj 是什么。 to_sql 用于插入数据。

我没有意识到我正在文本编辑器中查看文件。我为 Visual Studio 安装了一个插件,并希望它能够提供数据库可视化。它不是。我安装了数据库浏览器,我的数据就在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2022-01-24
    • 2019-02-22
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多