在一些小的应用中,难免会用到数据库,Sqlite数据库以其小巧轻便,无需安装,移植性好著称,本文主要以一个简单的小例子,简述Python在Sqlite数据库方面的应用,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
sqlite3是Python集成的内置类库,提供Python操作sqlite3的相关接口。
sqlite3.connect(dbfile) 创建数据库连接,返回一个连接对象
conn.cursor() 创建游标对象,通过返回的cursor对象,执行相应的SQL语句。
cur.execute(sql, *args) 执行语句
conn.commit() 提交执行的结果到数据库
conn.rollback() 回退执行的结果
cur.close() 关闭cursor对象
conn.close() 关闭连接对象
基础操作代码
关于Python操作sqlite3的相关核心代码,如下所示:
创建数据表
1 defcreateDb():2 """创建db数据表"""
3 sql = '''
4 create table person (5 id integer primary key autoincrement not null,6 name varchar not null,7 age integer8 )9 '''
10 executeSql(sql)
View Code
插入语句
1 definsertData(name, age):2 """插入数据"""
3 sql = 'insert into person (name,age)values(?,?)'
4 executeSql(sql, (name, age))
View Code
update语句
1 defupdateData(id, name, age):2 """通过ID进行修改语句"""
3 sql = 'update person set name=?,age =? where id=?'
4 executeSql(sql, (name, age, id))
View Code
delete语句
1 defdeleteData(id):2 """通过ID删除数据"""
3 sql = 'delete from person where id=?'
4 executeSql(sql, (id,))
View Code
上面的语句都调用统一的executeSql方法,如下所示:
1 def executeSql(sql, *args):2 """执行更新语句"""
3 conn =sqlite3.connect(dbfile)4 cur =conn.cursor()5 try:6 cur.execute(sql, *args)7 conn.commit()8 print('执行成功,影响行数:', cur.rowcount)9 exceptException as e:10 conn.rollback()11 print(e)12 print('执行失败')13 finally:14 cur.close()15 conn.close()
View Code
查询语句(无条件查询)
1 defqueryData():2 """查询语句"""
3 sql = 'select id,name,age from person'
4 executeQuerySql(sql)
View Code
查询语句(条件查询)
1 defqueryDataById(id):2 """通过id进行查询"""
3 sql = 'select id,name,age from person where id = ?'
4 executeQuerySql(sql, (id,))
View Code
上面的查询语句,都调用统一的executeQuerySql方法,如下所示:
1 def executeQuerySql(sql, *args):2 """执行查询语句,可带参数"""
3 conn =sqlite3.connect(dbfile)4 cur =conn.cursor()5 try:6 cur.execute(sql, *args)7 persons =cur.fetchall()8 for p inpersons:9 print('当前行信息如下:')10 print(p) #返回的是一个元组tuple
11 print('查询成功')12 exceptException as e:13 print(e)14 print('查询失败')15 finally:16 cur.close()17 conn.close()
View Code
关于本例子的执行源码,可通过链接进行下载,如下所示:
Python参数传递方式
Python的参数传递一共有以下五种(位置参数、默认参数、变长参数、关键字参数、命名关键字参数)
位置传递,即参数按照定义的位置及顺序进行传递,如下所示:
1 #位置传递实例:
2 deffun1(a, b, c):3 return a + b +c4
5
6 print(fun1(1, 2, 3))
View Code
关键字传递,即通过传递的参数的名称进行识别。
1 #关键字传递
2 deffun2(a, b, c):3 return a + b +c4
5
6 print(fun2(1, c=3, b=2))
View Code
默认值参数传递,即给某些参数设置一个默认值,如果不传则读取默认值。
1 #默认值传递
2 def fun3(a, b=2, c=3):3 return a + b +c4
5
6 print(fun3(a=1))
View Code
元组传递,在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。元组参数来进行参数传递会非常有用。如下所示:
1 def fun4(*name):2 print(type(name))3 print(name)4
5
6 fun4((1, 2, 3))
View Code
字典传递,虽然通过元组可以传递多个参数,但如果需要通过键值来获取参数内容时,字典则更加方便,如下所示:
1 def fun5(a, b, **kwargs):2 print(type(kwargs)) #
3 print(a, b, kwargs)4
5
6 fun5(2, 3, name='Alan.hsiang', age=23)
View Code
参数传递注意事项:
不可变参数“通过值”进行传递
像整数和字符串这样的对象是不可变对象,它们通过对象引用而不是拷贝进行传递的,但是因为无论如何都不可能在原处改变不可变对象,实际的效果就很像创建了一份拷贝
可变对象是通过“指针”进行传递的
列表和字典这样的对象也是通过对象引用进行传递的,这一点与C语言使用指针传递数组很相似,可变对象能够在函数内部进行原处的改变,这一点和C数组很像
这些参数在书写时要遵循一定的顺序即:位置参数、默认参数、变长参数、关键字参数、命名关键字参数
备注
业精于勤,荒于嬉;行成于思,毁于随!!!