以SQLite和PySqlite为例来学习Python DB API
Python应用编程需要用到的针对不同数据库引擎的数据库接口:http://wiki.python.org/moin/DatabaseInterfaces
Python标准的DBAPI2.0见:http://www.python.org/dev/peps/pep-0249/
本文将以SQLite和PySqlite为例来学习PythonDBAPI。
pysqlite是一个sqlite为python提供的api接口,它让一切对于sqlit的操作都变得异常简单。
从Python2.5起,pysqlite作为Python的一个标准模块。在使用标准库时,它被简称为sqlite3模块。
sqlite3标准库,详见:http://docs.python.org/3.3/library/sqlite3.html
基本的学习内容如下:
1.创建一张表
#filename:create.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #创建数据表的sql语句 createtb_sql="""createtabletest( idinteger, nametext, ageinteger);""" #调用execute()执行create_sql语句 cur.execute(createtb_sql) #关闭游标 cur.close() #关闭连接 conn.close()
2.简单的插入数据
#filename:insert.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #向数据表中插入数据的sql语句 ''' insert_sql=""" insertintotestvalues(1,'huhu',20); insertintotestvalues(2,'hengheng',18); insertintotestvalues(3,'huahua',18); """ ''' insert_sql=""" insertintotestvalues(1,'huhu',20); """ #调用execute()执行insertsql语句 #execute一次只能执行一条语句 cur.execute(insert_sql) #提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
3.查询
#filename:select.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #查询数据表的sql语句 select_sql="""select*fromtest;""" #调用execute()执行selectsql语句 cur.execute(select_sql) ''' whileTrue: #fetchone()把查询的结果集的下一行作为序列或者None row=cur.fetchone() ifrow==None: break print(row) ''' ''' #fetchall()把查询的结果集的所有行作为序列的序列 forrowincur.fetchall(): print(row) ''' #迭代对象遍历 forrowincur: print(row) #关闭游标 cur.close() #关闭连接 conn.close()
4.删除数据
#filename:delete.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #delete语句 delete_sql="""deletefromtest""" #execute()执行sql语句 cur.execute(delete_sql) #commit()提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
以上四步的运行结果:
5.一次插入多条数据
#filename:insertmany.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #向数据表中插入数据的sql语句 insert_sql="""insertintotestvalues(?,?,?)""" #调用execute()执行insertsql语句 #execute一次只能执行一条语句 forlineinopen('E:/code/py/db/data.txt'): fields=line.split(',') vals=[fforfinfields] cur.execute(insert_sql,vals) #提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
data.txt:
1,huhu,18
2,hengheng,18
3,lq,20
运行结果:
6.插入数据的方法(参数绑定,executemany的使用):
#inserts.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #向数据表中插入数据的sql语句 #最简单的insert形式 insert_sql1="""insertintotestvalues(1,'huhu',20);""" #execute()一次只能执行一条语句 cur.execute(insert_sql1) #参数绑定 #execute()第二个参数:位置参数或者字典类型参数 insert_sql2="""insertintotestvalues(?,?,?)""" cur.execute(insert_sql2,(2,'hengheng',18)) insert_sql3="""insertintotestvalues(:id,:name,:age)""" cur.execute(insert_sql3,{'id':3,'name':'lq','age':18}) #executemany()第二个参数:列表类型参数,适用于迭代器和生成器 l=[(4,'huhu',18),(5,'hh',18),(6,'lq',18)] cur.executemany(insert_sql2,l) #利用生成器实现 defl_generator(): l=[(7,'huhu',18),(8,'hh',18),(9,'lq',18)] fortinl: yield(t) cur.executemany(insert_sql2,l_generator()) #提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
运行结果:
7.带条件的的update、delelte和select语句
(1)update
#filename:update.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #update语句 update_sql="""updatetestsetname='noname'whereid=?""" #execute()和executem()执行sql语句 x=(1,) cur.execute(update_sql,x) y=(2,) cur.execute(update_sql,y) l=[(3,),(4,),(5,)] cur.executemany(update_sql,l) #commit()提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
运行结果:
(2)delete
#filename:delete1.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #delete语句 delete_sql="""deletefromtestwhereid=?""" #execute()和executemany()执行sql语句 cur.execute(delete_sql,(1,)) cur.executemany(delete_sql,[(2,),(3,)]) #commit()提交事务 conn.commit() #关闭游标 cur.close() #关闭连接 conn.close()
运行结果:
(3)select
#filename:select1.py importsqlite3 #创建连接对象 conn=sqlite3.connect('E:/code/py/db/test.db') #创建一个游标对象 cur=conn.cursor() #查询数据表的sql语句 select_sql="""select*fromtestwhereid=?;""" #调用execute()执行selectsql语句 x=(8,) cur.execute(select_sql,x) ''' #在executemany中,不能执行select语句 y=[(2,),(3,)] cur.executemany(select_sql,y) ''' #迭代对象遍历 forrowincur: print(row) #关闭游标 cur.close() #关闭连接 conn.close()
运行结果:
sqlite3标准库相比PythonDBAPI2.0,增加了一个较为方便的函数executescript函数(一次可以执行多条sql),介绍如下:
ThisisanonstandardconveniencemethodforexecutingmultipleSQLstatementsatonce.Itissuesa COMMIT statementfirst,thenexecutestheSQLscriptitgetsasaparameter.
sql_script canbeaninstanceof str or bytes.
Example:
importsqlite3 con=sqlite3.connect(":memory:") cur=con.cursor() cur.executescript(""" createtableperson( firstname, lastname, age ); createtablebook( title, author, published ); insertintobook(title,author,published) values( 'DirkGently''sHolisticDetectiveAgency', 'DouglasAdams', ); """)
好了这篇文章就为大家介绍到这了,希望大家以后多多支持毛票票。