首页 > 解决方案 > SQLite3:运行python代码后的空数据库

问题描述

我想用两个表做一个简单的数据库。所以我使用这段代码来制作它并填充我的 .csv 数据:

import sqlite3
import pandas as pd
import os

conn = sqlite3.connect("base.db")
c = conn.cursor()

c.execute('''
CREATE TABLE IF NOT EXISTS table_1 (
Name TEXT,
Index INTEGER,
Sample_ID TEXT PRIMARY KEY);
''')

c.execute('''
CREATE TABLE IF NOT EXISTS table_2 (
Other_id TEXT PRIMARY KEY,
info TEXT);
''')

cmd1 = """sqlite3 base.db <<< ".import table_1.csv table_1" """
cmd2 = """sqlite3 base.db <<< ".import table_2.csv table_2" """

rc1 = os.system(cmd1)
rc2 = os.system(cmd2)

conn.commit()

conn.close()

我得到一个带有数据库的文件,但是当我SELECT COUNT(*) FROM table_2;在 DBeaver 中使用这个命令时,我得到零计数。此外,.db 文件的大小为 20,5 kB(20 480 字节)。

我该如何解决?为什么我的数据库是空的?

我用这个:

标签: pythondatabasesqlite

解决方案


下面是一个使用.import此 SO 答案的解决方案的经过测试和工作的示例:https
://stackoverflow.com/a/41788666/42346 您发送的命令os.system()有多个问题。
另一个问题是您不能重新使用保留字Index作为列名,因此我将其更改为Idx.

import sqlite3
import pandas as pd
import os

conn = sqlite3.connect("base.db")
c = conn.cursor()

# note change from `Index` to `Idx` because the former is a reserved word in SQLite
c.execute('''
CREATE TABLE IF NOT EXISTS table_1 (
Name TEXT,
Idx INTEGER,
Sample_ID TEXT PRIMARY KEY);
''')

c.execute('''
CREATE TABLE IF NOT EXISTS table_2 (
Other_id TEXT PRIMARY KEY,
info TEXT);
''')

cmd1 = """(echo .separator ,; echo .import table_1.csv table_1) | sqlite3 base.db"""
cmd2 = """(echo .separator ,; echo .import table_2.csv table_2) | sqlite3 base.db"""

rc1 = os.system(cmd1)
rc2 = os.system(cmd2)

conn.commit()

conn.close()

推荐阅读