问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于Python操作SQLite的数据库问题,怎么写一个数据库查询,(就是如果数据存在,就更新数据,不存在就就写

发布网友 发布时间:2022-04-09 04:27

我来回答

4个回答

懂视网 时间:2022-04-09 08:49

不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。相比其它大型数据库来说,确实有些差距。但是包括事务(transaction),就是代表原子性、一致性、隔离性和持久性的(ACID),触发器(trigger)和多数的复杂查询都是支持的。另外,在于语言上绑定也是十分出色:包含了PHP,python,c/c++等等。

更多信息请参看:http://zh.wikipedia.org/wiki/SQLite

 

在python使用SQLite3

(以下信息摘至:http://anony3721.blog.163.com/blog/static/5119742010716104442536/)

python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本 上都是下面几步(假设数据库模块名为db):

  1. 用db.connect创建数据库连接,假设连接对象为conn

  2. 如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,可能修改数据库需要conn.commit

  3. 如果需要返回查询结果则用conn.cursor创建游标对象cur, 通过cur.execute查询数据库,用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要conn.commit

  4. 关闭cur,close()

一 Python SQLITE数据库导入模块:

  import sqlite3

二 创建数据库/打开数据库:

  cx = sqlite3.connect("E:/test.db") 其实我们不需要显式的创建一个sqlite数据库,在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在 就新创建一个再打开。这一点应用很好理解。

三 数据库连接对象:

  打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

  commit()--事务提交   

  rollback()--事务回滚   

  close()--关闭一个数据库连接  

  cursor()--创建一个游标

四 Python SQLITE数据库游标的使用:

  游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联。因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。
  我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。下面着重阐述cursor游标的使用。其实,所有sql语句的执行都要在游标对象下进行。

  首先,定义一个游标:

  cu = cx.cursor() 这样定义了一个游标。游标对象有以下的操作:

  execute()--执行sql语句   

  xecutemany--执行多条sql语句   

  close()--关闭游标  

  fetchone()--从结果中取一条记录,并将游标指向下一条记录   

  fetchmany()--从结果中取多条记录   

  fetchall()--从结果中取出所有记录   

  scroll()--游标滚动

  下面就使用Python SQLITE数据库中游标对我们上面建立的数据库作一些操作吧:

  1 建表:
  cu.execute(‘create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE)‘) 上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的。

  2 插入数据:
  cu.execute("insert into catalog values(0, 0, ‘name1‘)")  cu.execute("insert into catalog values(1, 0, ‘hello‘)") 简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.
cx.commit()

  3 查询:
  cu.execute("select * from catalog") 要提取查询到的数据,使用游标的fetch***函数,如:
print cu.fetchall() 返回结果如下:
[(0, 0, u‘name1‘), (1, 0, u‘hello‘)] 如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.

  4 修改:
  cu.execute("update catalog set name=‘name2‘ where id = 0") 

  cx.commit() 注意,修改数据以后提交

  5 删除:
  cu.execute("delete from catalog where id = 1")  cx.commit() 以上简单的操作反应的Python SQLITE数据库操作的基本要点,这里点到为止.然后,SQLite的强大,并不仅限于此,其对SQL高级特性的支持及其小巧灵活的特点,使得 SQLite在众多领域受到开发者的青睐.

  举例:

  Exemplary exemplar 1

  import sqlite3

  con = sqlite3.connect(‘d:/mydatabase.db3‘)
  cur = con.cursor()
  cur.execute(‘CREATE TABLE foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges VARCHAR(30))‘)
  con.commit()
  cur.execute(‘INSERT INTO foo (o_id, fruit, veges) VALUES(NULL, "apple", "broccoli")‘)
  con.commit()
  print cur.lastrowid

  cur.execute(‘SELECT * FROM foo‘)
  print cur.fetchall()

  Exemplary exemplar 2

  #-*- encoding:gb2312 -*-
  import sqlite3

  conn = sqlite3.connect("D:/aaa.db")
  conn.isolation_level = None #这个就是事务隔离级别,默认是需要自己commit才能修改数据库,置为None则自动每次修改都提交,否则为""
  # 下面就是创建一个表
  conn.execute("create table if not exists t1(id integer primary key autoincrement, name varchar(128), info varchar(128))")
  # 插入数据
  conn.execute("insert into t1(name,info) values (‘zhaowei‘, ‘only a test‘)")
  # 如果隔离级别不是自动提交就需要手动执行commit
  conn.commit()
  # 获取到游标对象
  cur = conn.cursor()
  # 用游标来查询就可以获取到结果
  cur.execute("select * from t1")
  # 获取所有结果
  res = cur.fetchall()
  print ‘row:‘, cur.rowcount
  # cur.description是对这个表结构的描述
  print ‘desc‘, cur.description
  # 用fetchall返回的结果是一个二维的列表
  for line in res:
    for f in line:
        print f,
    print
  print ‘-‘*60

  cur.execute("select * from t1")
  # 这次查询后只取一个结果,就是一维列表
  res = cur.fetchone()
  print ‘row:‘, cur.rowcount
  for f in res:
    print f,
  print
  # 再取一行
  res = cur.fetchone()
  print ‘row:‘, cur.rowcount
  for f in res:
    print f,
  print
  print ‘-‘*60

  cur.close()
  conn.close()

python之数据库操作(sqlite)

标签:

热心网友 时间:2022-04-09 05:57

必须先读取数据,然后再关闭游标,否则就读不出数据。
你的dbfind函数里应该在execute之后就进行数据查询,然后再执行c.close(),否则就读不出数据,而且会出错

热心网友 时间:2022-04-09 07:15

用 insert or replace语句不用加锁

热心网友 时间:2022-04-09 08:49

要的话加Q 六十六零五五五四三一起研究下
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“晚来天欲雪,能饮一杯无?”是什么意思_出处及原文翻译_学习力 胸肌中部怎么练 血沉高是怎么回事,怎样才能降低啊! 中海锦江城多久交房 “QMS”作为“质量管理体系”的英文缩写,其背后理论及应用如何?_百度... 我用QQ登的快手绑定了一个电话号码,电话号码不用了,现在怎么能登得进去... 桂林银行白金客户条件 桂林银行最高等级卡 iQOO 11系列曝光,预计年底正式发布! vivo X90先别买?iQOO 11系列配置堪称豪华 2021年湖南长沙美容美发学校排行榜,十大美发培训机构有哪些? 淘宝突然很多询单的都问发什么快递又不买是怎么回事 想学美发,长沙有比较好的美发学校吗? “降本守利“,招标采购如何守好最后一道防线 湖南长沙最正规的美容美发学校是哪家?推荐一下,谢谢! 京东快递查31351165996询单号查询 长沙美容美发学校哪家好? 举例说明采购招标的运作流程有哪些论文 什么是询单和催单 招标采购法律法规与* 招标采购专业实务 项目管理与招标采购 招标采购案例分析 这4个的历年考试真题有没 印度第一大都市孟买,在中国到底属于几线城市? 招标案例分析:采购方式的选择 孟买是哪的首都?属于什么气候? 办手机卡要不要本人去 2015南昌教师招聘考试真题哪儿有? 办理手机副卡要本人去才行吗?可以只拿身份证去吗?不是主卡人去 教师招聘考试的考试科目和题型您知道吗?时事*和数学语文吗?如题 谢谢了 住房公积金可贷额度怎么计算,最高多少 教师招聘考试入门知识有哪些? 谁有体育招教的相关试题与答案??急急急!!! 长沙美容美发培训到哪里好一些啊?求推荐 韵询单号3102243615820 韵达快递查已换出,韵达,1300026145608询单号 长沙最好的美容美发学院是哪间? 申通快递单号査询单号:761460991435。 长沙美容美发培训到哪里好一些啊?求推荐~ 长沙市有哪些正规的美容美发学校啊?要有实力和信誉好的,主要是学彩妆和发型设计,谢谢 金丝猴快递听说过吗?怎么杳询单号呢? 百事快递杳询单号71151218373218 百世快递杳询单号还要手机号码18524924769? 湖南美容美发学校有哪些?哪里比较好啊! 如何提高售前询单转化率 如何提高店铺DSR指标,请教各位大神 噪音对人类有哪些危害 淘宝仓库打包工资是怎么算的 厦门艾德生物技术研究中心有限公司怎么样? 应聘 厦门艾德生物医药科技 的研发工程师,请问待遇怎么样? 谢谢 厦门艾德生物医药科技 有限公司上班几天制 华大基因、艾德生物、金域医学这种新股如何买入? 喝什么泡水对心脏最好