• Python之Sqlite3数据库基本操作


    在一些小的应用中,难免会用到数据库,Sqlite数据库以其小巧轻便,无需安装,移植性好著称,本文主要以一个简单的小例子,简述Python在Sqlite数据库方面的应用,仅供学习分享使用,如有不足之处,还请指正。

    涉及知识点

    1. sqlite3是Python集成的内置类库,提供Python操作sqlite3的相关接口。
    2. sqlite3.connect(dbfile) 创建数据库连接,返回一个连接对象
    3. conn.cursor() 创建游标对象,通过返回的cursor对象,执行相应的SQL语句。
    4. cur.execute(sql, *args) 执行语句
    5. conn.commit() 提交执行的结果到数据库
    6. conn.rollback() 回退执行的结果
    7. cur.close() 关闭cursor对象
    8. conn.close() 关闭连接对象

    基础操作代码

    关于Python操作sqlite3的相关核心代码,如下所示:

    创建数据表

     1 def createDb():
     2     """创建db数据表"""
     3     sql = '''
     4     create table person (
     5     id integer primary key  autoincrement  not null,
     6     name varchar not null,
     7     age integer
     8     )
     9     '''
    10     executeSql(sql)
    View Code

    插入语句

    1 def insertData(name, age):
    2     """插入数据"""
    3     sql = 'insert into person (name,age)values(?,?)'
    4     executeSql(sql, (name, age))
    View Code

    update语句

    1 def updateData(id, name, age):
    2     """通过ID进行修改语句"""
    3     sql = 'update  person set name=?,age =?  where id=?'
    4     executeSql(sql, (name, age, id))
    View Code

    delete语句

    1 def deleteData(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     except Exception as e:
    10         conn.rollback()
    11         print(e)
    12         print('执行失败')
    13     finally:
    14         cur.close()
    15         conn.close()
    View Code

    查询语句(无条件查询)

    1 def queryData():
    2     """查询语句"""
    3     sql = 'select id,name,age from person '
    4     executeQuerySql(sql)
    View Code

    查询语句(条件查询)

    1 def queryDataById(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 in persons:
     9             print('当前行信息如下:')
    10             print(p)  # 返回的是一个元组tuple
    11         print('查询成功')
    12     except Exception as e:
    13         print(e)
    14         print('查询失败')
    15     finally:
    16         cur.close()
    17         conn.close()
    View Code

     关于本例子的执行源码,可通过链接进行下载,如下所示:

    源码链接

    Python参数传递方式

    Python的参数传递一共有以下五种(位置参数、默认参数、变长参数、关键字参数、命名关键字参数)

    位置传递,即参数按照定义的位置及顺序进行传递,如下所示:

    1 # 位置传递实例:
    2 def fun1(a, b, c):
    3     return a + b + c
    4 
    5 
    6 print(fun1(1, 2, 3))
    View Code

    关键字传递,即通过传递的参数的名称进行识别。

    1 # 关键字传递
    2 def fun2(a, b, c):
    3     return a + b + c
    4 
    5 
    6 print(fun2(1, c=3, b=2))
    View Code

    默认值参数传递,即给某些参数设置一个默认值,如果不传则读取默认值。

    1 # 默认值传递
    2 def fun3(a, b=2, c=3):
    3     return a + b + c
    4 
    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))  # <class 'dict'>
    3     print(a, b, kwargs)
    4 
    5 
    6 fun5(2, 3, name='Alan.hsiang', age=23)
    View Code

    参数传递注意事项:

    • 不可变参数“通过值”进行传递
      • 像整数和字符串这样的对象是不可变对象,它们通过对象引用而不是拷贝进行传递的,但是因为无论如何都不可能在原处改变不可变对象,实际的效果就很像创建了一份拷贝
    • 可变对象是通过“指针”进行传递的
      • 列表和字典这样的对象也是通过对象引用进行传递的,这一点与C语言使用指针传递数组很相似,可变对象能够在函数内部进行原处的改变,这一点和C数组很像
    • 这些参数在书写时要遵循一定的顺序即:位置参数、默认参数、变长参数、关键字参数、命名关键字参数

    备注

     业精于勤,荒于嬉;行成于思,毁于随!!!

  • 相关阅读:
    node分离路由文件
    node项目搭建步骤
    在express获取POST(类似表单请求)的数据
    10分钟搭建Kubernetes容器集群平台(kubeadm)
    今日考题
    jQuery方法介绍
    JQuery练习题
    今日面试题:
    bom操作,事件与jquery
    今日理解之js
  • 原文地址:https://www.cnblogs.com/hsiang/p/13382879.html
Copyright © 2020-2023  润新知