python - 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 字节)。
我该如何解决?为什么我的数据库是空的?
我用这个:
- Ubuntu 20.04
- 蟒蛇 3.8.5
- sqlite3 3.31.1
- DBeaver 21.0.4
解决方案
下面是一个使用.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()
推荐阅读
- java - 如何在运行时使用字段类型创建新的类实例
- angular - 当Angular 08 NGX数据表中的属性[frozenLeft] =“true”时如何停止将复选框移动到右上角
- apache-spark - Spark将表格写入parquet格式而不连接到一个文件中
- css - React Native:borderBottom 不显示在空视图中
- php - 我的棘轮 websockets 不能在共享服务器上工作
- r - 我们可以将行中的值分解为 R 中的列吗?
- json - Azure 数据工厂中 Azure 函数的 GET 方法失败
- python - 使用键选择按钮时,更改 QPushbutton 周围边框的厚度
- php - 编辑产品/类别时如何检查 SEO 关键字是否已存在 - Opencart
- c# - Microsft 图形 API 访问令牌