1.问题描述:使用python for语句循环插入数据到数据库(sqlite3),然后使用select * from tabname 然后用fetchall得到所有结果,结果为空,但是将数据表放到linux下用sqlite3打开然后.du就能看的插入的所有数据,望大神讲解~
代码:
--coding:gb2312--
import xlrd
import os
import sys
global strall
import sqlite3
import pprint
strall = None
def get_xlsx():
stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr
reload(sys)
sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde
sys.setdefaultencoding('gb2312')
xlrd.Book.encoding = "gb2312"
xlsx = xlrd.open_workbook(r'f:\20170809_mailbox.xlsx')
print xlsx.sheet_names()
print type(xlsx.sheet_names())
sheet = xlsx.sheet_by_name('Sheet1')
print sheet.nrows,sheet.ncols
row_name_data = sheet.row_values(0)
list1 = []
user_data = []
for numc in range(1,int(sheet.nrows)):
data = sheet.row_values(numc)
temp_data = []
for temp in range(len(data)):
data_to_unicode = unicode(data[temp])
temp_data.append(data_to_unicode)
user_data.append(temp_data)
conn = sqlite3.connect(r'f:\sec2.db')
cur = conn.cursor()
conn.execute('''
CREATE TABLE user_info(
user_id INTEGER DEFAULT 0 PRIMARY KEY ,
user_number INTEGER DEFAULT 0 UNIQUE,
user_name VARCHAR(15),
user_type VARCHAR(15),
user_system VARCHAR(15),
user_group VARCHAR(30),
first_group VARCHAR(30),
second_group VARCHAR(30),
user_company VARCHAR(30),
work_mail_vc VARCHAR(30),
work_mail_vcc VARCHAR(30),
work_mail_v VARCHAR(30),
work_mail_lds VARCHAR(30),
work_mail_hzhz VARCHAR(30),
work_mail_un VARCHAR(30)
)
''')
query = 'INSERT INTO user_info VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
for q in range(len(user_data)):
print '#########'
#print user_data[q][2]
conn.execute(query,(user_data[q][0],user_data[q][1],user_data[q][2],user_data[q][3],user_data[q][4],user_data[q][5],user_data[q][6],user_data[q][7],user_data[q][8],user_data[q][9],user_data[q][10],user_data[q][11],user_data[q][12],user_data[q][13],user_data[q][14]))
conn.commit()
conn.execute('SELECT * FROM user_info')
#cur.execute("SELECT tbl_name FROM sqlite_master WHERE type='table'")
result = cur.fetchall()
pprint.pprint(result)
conn.close()
if name == '__main__':
get_xlsx()
conn是用来获取cur的,
cur才算excute的执行者,
你用conn.excute.....