初学 sqlite ( python )
已经成功尝试把一些数据转移到 db 中,这次不知什么原因,执行了却没有任何数据过去。
查了一些文档,一般都是没有 commit 导致的,可是我已经 commit 了,其中 value 我用 print 打印看过,内容都有(10 列,4k 行左右)。用数据库查看器看下来的结果就是只有 table f65,以及一排 column name,没有数据内容。
求教各位,预先谢谢。还不会用 markdown,手工尽可能排版了,各位将就看。
df = pd.DataFrame(pd.read_excel(r'/Users/' + username + r'/Documents/working/addf6-5.xlsx', header=0))
df = df.replace('#NUM!', '')
value = chain(reversed(grouplist2), df.values.tolist())
for x in value:
(4 个空格)x[4] = str(x[4])
(4 个空格)x[7] = str(x[7])
conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS f65")
conn.commit()
c.close()
conn.close()
conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS f65 ('offer', 'code', 'desc', 'engine', 'cost', 'supplier', 'remark', 'podate', 'empty', 'border')")
c.executemany("INSERT INTO f65 VALUES (?,?,?,?,?,?,?,?,?,?)", value)
conn.commit()
c.close()
conn.close()
1
mingl0280 2019-03-03 04:57:16 +08:00
你参数都没绑定上去怎么写?写什么?空气么?
|
2
shawnxwang 2019-03-03 05:11:32 +08:00
一楼老大哥已经给你答疑解惑了
|
3
noqwerty 2019-03-03 06:19:36 +08:00 via Android
你这个 4 个空格缩进太灵性了😂
|
4
greatbody 2019-03-03 07:41:29 +08:00
其实你可以写在 github 里面,然后扔一个链接的。
|
5
youthfire OP @mingl0280 抱歉,没有明白哪步还需要参数,能否拨冗指点下?
我其他几个文件都是用几乎一样的语句写完并存完了所有数据,唯一的区别只是 column 的 name 不同。 |
6
jingxyy 2019-03-03 11:48:14 +08:00 1
我没环境 猜一个供 lz debug 参考哈
大概 create table 那句没写对?字段类型都没有这能创建成功吗? |
8
Marsss 2019-03-04 08:28:35 +08:00 via iPhone 1
可能是 value 的格式不符合要求吧,executemany 要求为元组类型,当你一眼看不出问题在哪里的时候,排除法可以协助分析,比如你自己构造一组测试数据,参考官方文档例子构造,测试以后就可以知道是数据的问题还是数据库表的问题了。
|
9
youthfire OP @Marsss 谢谢,确实是这个问题。
value = chain(reversed(grouplist2), df.values.tolist()) 我尝试了下 print(type(value)), 发现是 <class 'itertools.chain'> 我如果多加一句 value = sorted(value, key=itemgetter(0)),所有数据就写入正常了。 正好我这次相比其他文件,不需要进行排序,所以也就没有形成符合要求的类型。 初学,我并不清楚为什么 value 经过 chain 的合并操作是个 class 而不是 list。包括我调试用 for x in value 来打印 x 的时候感觉也完全跟操作打印 list 中嵌套的 list 展示结果又是符合预期的。 |
10
sarlanori 2019-03-04 10:21:19 +08:00
既然楼主已经找到问题了,那我就说个其他问题吧,数据库为什么要打开关闭两次呢?
|