以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',
);
""")
好了这篇文章就为大家介绍到这了,希望大家以后多多支持毛票票。