sqllite数据库使用

关于sqllite的使用:

Sqllite的主要简介什么的可以去菜鸟教程看看,这里只简介我使用过程中的一些经验

由于我是初次接触这个软件,写的不对的地方请大神指正

感觉很轻便,下载一个sqllite,别人给一个数据库,然后用下载的软件直接打开就可以了,也不用任何配置,但是使用过程中的感受是总会锁死,有时候还会经常报数据库malformed

这个很讨厌,动不动就是锁死,有时候过一会可以解开,有时候根本就一直打不开了,显示状况是需要输入密码。反正用时候记得备份几个就可以了

建议:

[if !supportLists]1.[endif]初次使用不要用多线程,开两个程序都会锁死,针对一个表的多个读和单个改写可以,但是不可以多个写

[if !supportLists]2.[endif]对于一个数据库中的两个表之间的连查然后写入另一个表这种情况,一定记得用两个数据库:

conn = sqlite3.connect('E:/1.db')conn1=sqlite3.connect('E:/11.db')c = conn.cursor()c1 = conn1.cursor()count=0a = time.time()xx = [None for i in range(20000)]c1.execute('create table xx as select XXXXXXXXXXXXXXXX from XXXX limit 0')for x in c.execute("select XXXXX from XXXX,XXX,X,X,x where XXXX.xx=XXX.xx"):

#这个遍历的是一个数据库    xx[count]=x    count+=1    if count==20000:        c1.executemany("INSERT INTO new_entity2 VALUES(?,?,?,?,?)",((xx[count][0], xx[count][1], xx[count][2], xx[count][3], xx[count][4]) for count in range(20000)))

#执行的是另一个数据库。如果操作同一个数据库中的两个表,则只能查到第一条数据。???这个以后补充        conn1.commit()        count=0        b = time.time()        print("tijiao==============", b - a)        a = bconn1.commit()conn.close()conn1.close()

3.一些语句效率问题:

1)Update效率很低,大量数据慎用,挥泪经验。

如果需要给一个很大的表进行插入部分字段时候,比如本来表中有5个字段,但是只有2个字段有值,需要你去插入三个字段,这种情况下,就是用两表联查,然后将结果插入一个新的表。这样最快,100多万需要不到1分钟的样子。

[if !supportLists]2)[endif]Executemany的效率远远比execute的好很多

在插入大量数据时候,将数据存成20000左右,可以一次插入,再多应该不可以了吧,20000多条的时间是1秒到2秒左右的样子

不要以为execute可以一次执行很多条,然后每20000条commit一次的效率会比executemany快,其实错了,亲自尝试,随着代码的运行,用execute执行很多条,然后commit一次的时间会越来越高,或许开始会比executemany快一些,但是最后平均下来还是慢了不少。

[if !supportLists]3)[endif]不要以为读一条写入一条,然后删掉会能解决随着代码的运行越来越慢的问题,确实运行时间不会变了,但是会保持一个很慢的速度一直运行下去

[if !supportLists]4)[endif]解决问题一定要记住两点之间直线最短,能直接解决的绝对不绕弯。

你可能感兴趣的:(sqllite数据库使用)