python访问sqlite封装的常用类实例
- 格式:docx
- 大小:37.00 KB
- 文档页数:3
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. mit() 提交执⾏的结果到数据库6. conn.rollback() 回退执⾏的结果7. cur.close() 关闭cursor对象8. conn.close() 关闭连接对象基础操作代码关于Python操作sqlite3的相关核⼼代码,如下所⽰:创建数据表1def createDb():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插⼊语句1def insertData(name, age):2"""插⼊数据"""3 sql = 'insert into person (name,age)values(?,?)'4 executeSql(sql, (name, age))View Codeupdate语句1def updateData(id, name, age):2"""通过ID进⾏修改语句"""3 sql = 'update person set name=?,age =? where id=?'4 executeSql(sql, (name, age, id))View Codedelete语句1def deleteData(id):2"""通过ID删除数据"""3 sql = 'delete from person where id=?'4 executeSql(sql, (id,))View Code上⾯的语句都调⽤统⼀的executeSql⽅法,如下所⽰:1def executeSql(sql, *args):2"""执⾏更新语句"""3 conn = sqlite3.connect(dbfile)4 cur = conn.cursor()5try:6 cur.execute(sql, *args)7 mit()8print('执⾏成功,影响⾏数:', cur.rowcount)9except Exception as e:10 conn.rollback()11print(e)12print('执⾏失败')13finally:14 cur.close()15 conn.close()View Code查询语句(⽆条件查询)1def queryData():2"""查询语句"""3 sql = 'select id,name,age from person '4 executeQuerySql(sql)View Code查询语句(条件查询)1def queryDataById(id):2"""通过id进⾏查询"""3 sql = 'select id,name,age from person where id = ? '4 executeQuerySql(sql, (id,))View Code上⾯的查询语句,都调⽤统⼀的executeQuerySql⽅法,如下所⽰:1def executeQuerySql(sql, *args):2"""执⾏查询语句,可带参数"""3 conn = sqlite3.connect(dbfile)4 cur = conn.cursor()5try:6 cur.execute(sql, *args)7 persons = cur.fetchall()8for p in persons:9print('当前⾏信息如下:')10print(p) # 返回的是⼀个元组tuple11print('查询成功')12except Exception as e:13print(e)14print('查询失败')15finally:16 cur.close()17 conn.close()View Code关于本例⼦的执⾏源码,可通过链接进⾏下载,如下所⽰:Python参数传递⽅式Python的参数传递⼀共有以下五种(位置参数、默认参数、变长参数、关键字参数、命名关键字参数)位置传递,即参数按照定义的位置及顺序进⾏传递,如下所⽰:1# 位置传递实例:2def fun1(a, b, c):3return a + b + c456print(fun1(1, 2, 3))View Code关键字传递,即通过传递的参数的名称进⾏识别。
Python数据库操作中的SQLite技巧SQLite是一种轻型的数据库管理系统,它是基于C语言实现的,并占用了很少的计算机资源。
在Python中,SQLite可以通过Python 自带的sqlite3模块来操作,这使得Python成为使用SQLite的绝佳工具。
在本篇论文中,我们将探讨一些Python操作SQLite的技巧。
一、连接SQLite及基本数据类型SQLite通过sqlite3模块在Python中的使用需要先生成数据库连接。
通常的写法为:```import sqlite3conn = sqlite3.connect('test.db')```在这个例子中,我们连接了一个名为“test.db”的SQLite数据库。
如果这个数据库不存在,那么Python会自动创建它,否则Python 就会打开它,并连通到这个数据库之中。
生成连接之后,我们便可以通过SQLite支持的数据类型进行操作。
SQLite支持的数据类型包括:1. NULL:SQLite中的NULL表示空值。
2. INTEGER: SQLite中的整型数据类型,其中,integer可以使用4 、 6 、 8.3. REAL: SQLite中的实数数据类型。
4. TEXT: SQLite中的字符串数据类型。
5. BLOB: SQLite中的二进制数据类型。
在操作SQLite时,我们需要注意的是,SQLite是基于文件的,因此操作之前,需要确保数据表存在,否则Python会抛出一个错误。
二、创建、插入、查询数据表1.创建数据表Python允许我们通过SQL语句在SQLite中创建数据表,例子如下:```pythonimport sqlite3conn = sqlite3.connect('test.db')print("Opened database successfully")conn.execute('''CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);''')print("Table created successfully")conn.close()```在这个例子中,我们创建了一个名为COMPANY的数据表,其中包含ID、NAME、AGE、ADDRESS、SALARY五个列,ID为主键,且是一个自动增长的列。
Python操作SQLite数据库的⽅法详解本⽂实例讲述了Python操作SQLite数据库的⽅法。
分享给⼤家供⼤家参考,具体如下:SQLite简单介绍SQLite数据库是⼀款⾮常⼩巧的嵌⼊式开源数据库软件,也就是说没有独⽴的维护进程,所有的维护都来⾃于程序本⾝。
它是遵守ACID的关联式数据库管理系统,它的设计⽬标是嵌⼊式的,⽽且⽬前已经在很多嵌⼊式产品中使⽤了它,它占⽤资源⾮常的低,在嵌⼊式设备中,可能只需要⼏百K的内存就够了。
它能够⽀持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语⾔相结合,⽐如 Tcl、C#、PHP、Java等,还有ODBC接⼝,同样⽐起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度⽐他们都快。
SQLite第⼀个Alpha版本诞⽣于2000年5⽉. ⾄今已经有10个年头,SQLite也迎来了⼀个版本 SQLite 3已经发布。
安装与使⽤1.导⼊Python SQLITE数据库模块Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导⼊即可~import sqlite32. 创建/打开数据库在调⽤connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建⼀个再打开。
cx = sqlite3.connect("E:/test.db")也可以创建数据库在内存中。
con = sqlite3.connect(":memory:")3.数据库连接对象打开数据库时返回的对象cx就是⼀个数据库连接对象,它可以有以下操作:① commit()--事务提交② rollback()--事务回滚③ close()--关闭⼀个数据库连接④ cursor()--创建⼀个游标关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使⽤该命令,你也可以设置isolation_level=None,这样就变为⾃动提交模式。
python操作sqlite的⼩例⼦照着菜鸟教程学习python操作sqliteubuntu 安装sudo apte-get install sqlite3找到了sqlite3/bionic-updates,bionic-security,now 3.22.0-1ubuntu0.4 amd64 [installed]Command line interface for SQLite 3然后安装 sqlitebrowsersudo apt search sqlitebrowser找到这个sqlitebrowser/bionic,now 3.10.1-1.1 amd64 [installed]GUI editor for SQLite databases之后就是python 脚本了获取结果集按字典索引获取我找了找资料才处理好 row['NAME'] 不然就得⽤索引数组了定义 dict_factory 来替换 conn.row_factory#!/usr/bin/pythonimport sqlite3def dict_factory(cursor, row):d = {}for idx, col in enumerate(cursor.description):d[col[0]] = row[idx]return dconn = sqlite3.connect('test.db')conn.row_factory = dict_factoryprint"Opened database successfully"c = conn.cursor()c.execute('''CREATE TABLE if not exists COMPANY(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);''')print"Table created successfully"c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \VALUES (NULL, 'Paul', 32, 'California', 20000.00 )")c.execute("UPDATE COMPANY SET NAME='Mark_update' WHERE ID = 4")cursor = conn.execute("DELETE from COMPANY WHERE ID = 4")mit()print"Records created successfully"cursor = c.execute("SELECT name,age,address from COMPANY")for row in cursor.fetchall():print row['NAME']conn.close()。
PythonSQLite3数据库操作类分享接触Python时间也不是很长的,最近有个项⽬需要分析数据,于是选⽤Python为编程语⾔,除了语⾔特性外主要还是看重Python对于SQLite3数据库良好的⽀持能⼒了,因为需要灵活处理⼤量的中间数据。
刚开始⼀些模块我还乐此不疲的写SQL语句,后来渐渐厌倦了,回想到以前捣⿎C#的时候利⽤反射初步构建了个SQL查询构造器,直到发现linq,于是放弃了这个计划,当然微软后来⼜推出了Entity Framework,这些都是后话了,⽽且现在我对微软的东西兴趣不是很⼤的,好了,扯多了,下⾯继续正⽂。
对了,再扯⼀句,优秀的博客程序Drupal也使⽤了类似的查询构造器进⾏数据库查询,避免直接写SQL语句,另外这样做的⼀点点好处就是,可以⼀定程度的屏蔽平台相关性,对于数据库迁移还是有帮助的。
不过我今天介绍的数据库辅助类查询构造器是个很简单的东东,甚⾄只限于SQLite数据库,如果有童鞋感兴趣可以完善下,我⽬前只要操作SQLite顺⼿就可以了,对于⽐较⼤的数据库应⽤就直接上ORM吧。
先看代码:复制代码代码如下:import sqlite3# ***************************************************# *# * Description: Python操作SQLite3数据库辅助类(查询构造器)# * Author: wangye# *# ***************************************************def _wrap_value(value):return repr(value)def _wrap_values(values):return list(map(_wrap_value, values))def _wrap_fields(fields):for key,value in fields.items():fields[key] = _wrap_value(value)return fieldsdef _concat_keys(keys):return "[" + "],[".join(keys) + "]"def _concat_values(values):return ",".join(values)def _concat_fields(fields, operator = (None, ",")):if operator:unit_operator, group_operator = operator# fields = _wrap_fields(fields)compiled = []for key,value in fields.items():compiled.append("[" + key + "]")if unit_operator:compiled.append(unit_operator)compiled.append(value)compiled.append(group_operator)compiled.pop() # pop last group_operatorreturn " ".join(compiled)class DataCondition(object):"""本类⽤于操作SQL构造器辅助类的条件语句部分例如:DataCondition(("=", "AND"), id = 26)DataCondition(("=", "AND"), True, id = 26)"""def __init__(self, operator = ("=", "AND"), ingroup = True, **kwargs):"""构造⽅法参数:operator 操作符,分为(表达式操作符, 条件运算符)ingroup 是否分组,如果分组,将以括号包含kwargs 键值元组,包含数据库表的列名以及值注意这⾥的等于号不等于实际⽣成SQL语句符号实际符号是由operator[0]控制的例如:DataCondition(("=", "AND"), id = 26)(id=26)DataCondition((">", "OR"), id = 26, age = 35)(id>26 OR age>35)DataCondition(("LIKE", "OR"), False, name = "John", company = "Google") name LIKE 'John' OR company LIKE "Google""""self.ingroup = ingroupself.fields = kwargsself.operator = operatordef __unicode__(self):self.fields = _wrap_fields(self.fields)result = _concat_fields(self.fields, self.operator)if self.ingroup:return "(" + result + ")"return resultdef __str__(self):return self.__unicode__()def toString(self):return self.__unicode__()class DataHelper(object):"""SQLite3 数据查询辅助类"""def __init__(self, filename):"""构造⽅法参数: filename 为SQLite3 数据库⽂件名"""self.file_name = filenamedef open(self):"""打开数据库并设置游标"""self.connection = sqlite3.connect(self.file_name)self.cursor = self.connection.cursor()return selfdef close(self):"""关闭数据库,注意若不显式调⽤此⽅法,在类被回收时也会尝试调⽤"""if hasattr(self, "connection") and self.connection:self.connection.close()def __del__(self):"""析构⽅法,做⼀些清理⼯作"""self.close()def commit(self):"""提交事务SELECT语句不需要此操作,默认的execute⽅法的commit_at_once设为True会隐式调⽤此⽅法,否则就需要显⽰调⽤本⽅法。
Python 基础教程242DELETE FROM 表名WHERE 删除条件表达式当执行DELETE 语句时,指定表中所有满足WHERE 子句条件的行都将被删除。
【例11-6】 删除表Employees 中列Emp_name 等于“李明”的数据,可以使用以下SQL 语句:DELETE FROM Employees WHERE Emp_name = '李明'; 11.2.9 查询数据可以使用SELECT 语句查询表中的数据,基本使用方法如下:SELECT * FROM 表名WHERE 删除条件表达式*表示查询表中所有的字段,当执行SELECT 语句时,指定表中所有满足WHERE 子句条件的行都将被返回。
【例11-7】 查询表Employees 中列Title 等于“部门经理”的数据,可以使用以下SQL 语句:SELECT * FROM Employees WHERE Title= '部门经理';执行结果如下: |赵六|男|部门经理|0.0|4101234567890|2||钱九|男|部门经理|0.0|7101234567890|3|SELECT 语句还有很多复杂的用法,本小节只介绍最基本的使用方法。
SELECT 语句和INSERT 语句、UPDATE 语句、DELETE 语句等都是标准的SQL 语句。
本书将在11.3节中介绍MySQL 数据库时介绍SELECT 语句的详细用法。
11.2.10 在Python 中访问SQLite 数据库Python 中内置了sqlite3模块,可以很方便地访问SQLite 数据库。
首先需要使用下面的语句导入sqlite3模块:import sqlite31.创建和打开数据库使用connect()方法可以创建和打开数据库,具体方法如下:数据库连接对象 = sqlite3.connect(数据库名)数据库名是包含绝对路径的数据库文件名。
pyqt+sqlite使用实例以下是一个使用 PyQt 和 SQLite 的基本实例。
在这个例子中,我们将创建一个简单的数据库,并创建一个用户界面让用户可以输入和查看数据。
首先,我们需要导入必要的模块并创建数据库连接。
pythonimport sqlite3from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLineEdit, QLabel, QGridLayout, QTableWidget, QTableWidgetItemfrom PyQt5.QtCore import Qtclass DBController():def __init__(self):self.conn = sqlite3.connect('my_database.db')self.cursor = self.conn.cursor()self.cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEYAUTOINCREMENT,name TEXT NOT NULL,email TEXT NOT NULL UNIQUE);''')接下来,我们创建一个简单的用户界面。
这里只展示了部分代码,更多细节可以自己完善。
pythonclass UserInterface(QWidget):def __init__(self, db_controller):super().__init__()self.db_controller = db_controllerself.initUI()def initUI(self):layout = QVBoxLayout()self.setLayout(layout)layout.addWidget(QPushButton('Add User', self))layout.addWidget(QPushButton('View Users', self))self.setLayout(layout)然后我们定义两个按钮的点击事件,分别用于添加用户和查看用户。
利⽤Python实现sqlite3增删改查的封装⽬录开发背景:特性:使⽤⽅法测试⽤例Python参数传递⽅式总结开发背景:每次项⽬都要写数据库、烦死了。
然后就每次数据库都要花很多时间。
烦死了!不如写个通⽤的增删查改,以不变应万变!特性:搭建通⽤增删查改模块,减少代码量。
让代码更加清晰、可读即便进⾏了封装,也丝毫不影响其灵活性sqlite3我也就不多介绍了,直接上代码。
附上相关使⽤⽅法和测试⽤例!使⽤⽅法import sqlite3'''写⼀个类打包成库,通⽤于储存信息的sqlite''''''函数返回值可优化''''''使⽤:使⽤''''''说明:1、单例模式连接数据库:避免数据库connect过多导致数据库down2、根据数据库增删查改性能对⽐,统⼀使⽤execute进⾏常规数据库操作3、且不做try操作:1、影响性能 2、若报错,外部调⽤⽆法确定问题所在,'''class LiteDb(object):_instance = Nonedef __new__(cls, *args, **kw):if cls._instance is None:cls._instance = object.__new__(cls)return cls._instancedef openDb(self, dbname):self.dbname = dbnameself.conn = sqlite3.connect(self.dbname)self.cursor = self.conn.cursor()def closeDb(self):'''关闭数据库:return:'''self.cursor.close()self.conn.close()def createTables(self, sql):'''example:'create table userinfo(name text, email text)':return: result=[1,None]'''self.cursor.execute(sql)mit()result = [1, None]return resultdef dropTables(self, sql):'''example:'drop table userinfo':param sql::return:result=[1,None]'''self.cursor.execute(sql)mit()result = [1, None]return resultdef executeSql(self, sql, value=None):'''执⾏单个sql语句,只需要传⼊sql语句和值便可:param sql:'insert into user(name,password,number,status) values(?,?,?,?)' 'delete from user where name=?''updata user set status=? where name=?''select * from user where id=%s':param value:[(123456,123456,123456,123456),(123,123,123,123)]value:'123456'value:(123,123):return:result=[1,None]''''''增、删、查、改'''if isinstance(value,list) and isinstance(value[0],(list,tuple)):for valu in value:self.cursor.execute(sql, valu)else:mit()result = [1, self.cursor.fetchall()]else:'''执⾏单条语句:字符串、整型、数组'''if value:self.cursor.execute(sql, value)else:self.cursor.execute(sql)mit()result = [1, self.cursor.fetchall()]return result测试⽤例from dbUse import LiteDb'''对于⼆次封装的数据库进⾏测试''''''增删查改'''#⽤例'''select name from sqlite_master where type='tableselect * from user'select * from user where id = %s'%7select * from user where id = ? , 7select * from user where id=? or id=?, ['7','8']insert into user(id) values(7)'insert into user(id) values(%s)'%7'insert into user(id) values(?)',[('10',),('11',)]delete from user where id=7'delete from user where id=%s'%7'delete from user where id=?',[('10',),('11',)]update user set id=7 where id=11'update user set id=%s where id=%s'%(10,20)'update user set id=? where id=?',[('21','11'),('20','10')]'''db=LiteDb()db.openDb('user.db')def close():db.closeDb()def createTables():result=db.createTables('create table if not exists user(id varchar(128))')def executeSQL():'''增删查改'''result = db.executeSql('insert into user(id) values(?)',('99',))result = db.executeSql('select * from user ')executeSQL()close()Python参数传递⽅式Python的参数传递⼀共有以下五种(位置参数、默认参数、变长参数、关键字参数、命名关键字参数)位置传递,即参数按照定义的位置及顺序进⾏传递,如下所⽰:# 位置传递实例:def fun1(a, b, c):return a + b + cprint(fun1(1, 2, 3))关键字传递,即通过传递的参数的名称进⾏识别。
利⽤python操作SQLite数据库及⽂件操作详解前⾔最近在⼯作中遇到⼀个需求,就是要把SQLite数据中没有存储的⽂件名的⽂件删除掉,想来想去还是决定⽤python。
所以也就花了⼀天半的时间学习了下,随⼿写了个⼩例⼦,下⾯话不多说了,感兴趣的朋友们⼀起来看看详细的介绍吧。
直接上代码要⽤到的头⽂件包#coding=utf-8#!/usr/bin/python#!/usr/bin/env pythonimport osimport shutilimport sqlite3定义记录变量#记录所⽂件数sumCount=0;#记录留存⽂件数count=0;#记录删除⽂件数delCount=0;#定义存储遍历所有⽂件数组delList = []#⽂件存储路径delDir = "/Users/liudengtan/Desktop/testFile/"#获取路径下所有⽂件delList = os.listdir(delDir)#打开连接数据库conn = sqlite3.connect('images.db')print "开始处理...";把⽂件⽬录下的所有⽂件与数据库的存的对⽐,如果⽂件在数据中,就存留,否则删除⽂件#遍历for f in delList:#获取到⽂件路径filePath = os.path.join(delDir, f)if os.path.isfile(filePath):sumCount=sumCount+1#将⽂件全路径中存储路径替换,只留⽂件名fileName=filePath.replace(delDir,'')#数据库查看当前⽂件名是否存在cursor = conn.execute("SELECT image FROM '表名' where image=(?)",(fileName))res = cursor.fetchall()#条件判断>0⽂件存在if len(res) > 0:count = count + 1;else:#⽂件不存在将其删除if os.path.isfile(delDir + fileName):#删除⽂件操作os.remove(delDir + fileName)print delDir + fileName + " 删除!"delCount = delCount + 1;#关闭数据库conn.close()print "处⾥结束:";print "所有⽂件总数: ",sumCount;print "删除⽂件数: ",delCount;总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
在Python中,可以使用sqlite3模块来访问SQLite数据库。
为了方便使用,我们可以封装一些常用类来简化数据库操作。
下面是一个简单的示例,演示了如何封装常用的SQLite操作类:pythonimport sqlite3class SQLiteDB:def__init__(self, db_name):self.conn = sqlite3.connect(db_name)self.cursor = self.conn.cursor()def execute(self, sql, params=None):if params:self.cursor.execute(sql, params)else:self.cursor.execute(sql)return self.cursor.fetchall()def query(self, sql, params=None):self.cursor.execute(sql, params)return self.cursor.fetchall()def commit(self):mit()def close(self):self.conn.close()使用这个SQLiteDB类,我们可以方便地执行各种数据库操作,例如插入、查询、更新和删除数据等。
下面是一个示例:python# 创建SQLiteDB对象,指定数据库名称db = SQLiteDB('example.db')# 插入数据sql = "INSERT INTO users (name, age) VALUES (?, ?)"params = ('Alice', 25)db.execute(sql, params)# 查询数据sql = "SELECT * FROM users WHERE age > ?"params = (20,)results = db.query(sql, params)for row in results:print(row)# 更新数据sql = "UPDATE users SET age = ? WHERE name = ?" params = (26, 'Alice')db.execute(sql, params)mit() # 提交事务,更新数据表中的数据# 删除数据sql = "DELETE FROM users WHERE name = ?" params = ('Alice',)db.execute(sql, params)mit() # 提交事务,删除数据表中的数据# 关闭数据库连接db.close()。
python操作sqlite数据库的⽅法⽬录前⾔简单介绍创建或连接数据库游标创建表插⼊查询查询总数查询所有查询第⼀条分页查询更新删除总结前⾔sqlite的官⽹作为⼀个SQL数据库引擎,是由C语⾔实现的,⼜⼩⼜快,具有⾼可靠性且功能齐全。
作为嵌⼊式数据库,在移动设备中使⽤⾮常⼴泛且⽅便。
Python3中内嵌了sqlite的驱动,我们直接导⼊就⾏。
import sqlite3简单介绍⾸先我们给⼤家⼀个能够运⾏的Python程序,让⼤家对Python操作sqlite数据库有⼀个直观的感受。
# 导⼊SQLite驱动:import sqlite3# 连接到SQLite数据库# 数据库⽂件是test.db# 如果⽂件不存在,会⾃动在当前⽬录创建:conn = sqlite3.connect('test.db')# 创建⼀个Cursor:cursor = conn.cursor()# 执⾏⼀条SQL语句,创建user表:cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')# 继续执⾏⼀条SQL语句,插⼊⼀条记录:cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')# 通过rowcount获得插⼊的⾏数:print(cursor.rowcount)# 关闭Cursor:cursor.close()# 提交事务:mit()# 关闭Connection:conn.close()我们⽤Navicat连接这个数据库,可以看到需要注意的是每次关闭连接之前,⼀定要commit,否则做的任何操作都不会提交到数据库中创建或连接数据库conn = sqlite3.connect('test.db') ⾸先我们要做的是连接数据库,注意如果我们要访问的数据库不存在,那么会⾃动创建⼀个的 conn 就是⼀个数据库连接对象从上⾯的程序⾥我们可以看到1.它可以创建⼀个游标cursor = conn.cursor()2.它可以提交事务mit()3.它还可以关闭连接cursor.close()4.它还可以对事务做回滚cursor.rollback(),不过程序之中没有展⽰出来隔离级别可以在conn建⽴之前通过传⼊参数来进⾏修改conn = sqlite3.connect('test.db', isolation_level=None) 这样,对应的代码就不再需要commit()操作了游标游标对象有以下的操作execute()--执⾏sql语句executemany--执⾏多条sql语句close()--关闭游标fetchone()--从结果中取⼀条记录,并将游标指向下⼀条记录fetchmany()--从结果中取多条记录fetchall()--从结果中取出所有记录scroll()--游标滚动我们⼀般⽤到的是execute()更多⼀些创建表下⾯的代码可以创建表cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')可以看到建表语句和MySQL⾮常类似创建⾃增主键的语句CREATE TABLE "main"."test" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT);在Navicat的创建sqlite⾃增主键和MySQL也是⾮常类似插⼊插⼊这⾥很简单的cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')查询查询这⾥需要讲⼀讲是要先让游标将sql语句执⾏掉,再通过上⾯介绍的fetchone()--从结果中取⼀条记录,并将游标指向下⼀条记录fetchmany()--从结果中取多条记录fetchall()--从结果中取出所有记录来进⾏查询查询总数cursor.execute("select count(*) from user")print(cursor.fetchone())# (2,)查询所有cursor.execute("select * from user")print(cursor.fetchall())# [('1', 'Michael'), ('2', 'Danny')]查询第⼀条cursor.execute("select * from user")print(cursor.fetchone())# ('1', 'Michael')分页查询cursor.execute("select * from user LIMIT 1, 2")print(cursor.fetchall())更新更新呢也⽐较简单cursor.execute("update user set name='test' where id='1'")这⾥只要别忘了执⾏commit就⾏删除cursor.execute("delete from catalog where id = 4")总结⼈⽣苦短,我⽤ Python,在强⼤的Python帮助下,我们只需⼏⾏代码就可以操作sqlite数据库来储存查询我们想要的数据。
Python中如何使用SQLitePython作为一门非常重要的编程语言,已经成了很多人不可或缺的工具,尤其在数据科学领域。
而SQLite作为一款轻量级数据库管理系统则基于文件运作被广泛使用。
本文就Python中如何使用SQLite做一简单的介绍,旨在帮助初学者更快速掌握这两种工具。
1.SQLite简介SQLite是一款基于文件的关系型数据库管理系统,由于其具有轻量级、易于使用以及开源的特点而广受欢迎。
SQLite可以在各种操作系统上面受支持,是开发者在不想使用大型复杂的数据库系统时的常选之一。
SQLite的主要特点可以概括为:1)轻量级:SQLite核心代码库只有几百KB,可以在小至一个芯片板上运行。
2)易于使用:SQLite数据库可以单独存在一个文件中,较为灵活,易于操作,实现和维护。
3)适合小型应用和个人使用:因为SQLite的轻量级和易于使用的特点,它在小型应用和个人使用中广受欢迎。
2. SQLite的基于Python的开发优势Python作为一种高级编程语言,拥有很多好用的库,其中SQLite在Python中的开发和使用使得编程更加方便和快速。
在Python中使用SQLite可以直接操作数据库并且使用SQL语言的方式很容易上手。
Python常用的SQLite库是sqlite3。
SQLite3是sqlite3官方提供的Python库,可以直接在Python中较为方便地操作SQLite数据库。
SQLite3提供了以下函数来进行数据库操作:#打开数据库连接def connect(database_name):conn = Nonetry:conn = sqlite3.connect(database_name)print(f"{database_name}开启连接成功")except Error as e:print(e)return conn#创建表def create_table(conn, table_sql): cursor = conn.cursor()try:cursor.execute(table_sql)mit()print("表创建成功")except Error as e:print(e)#插入数据def insert_data(conn, data_sql):cursor = conn.cursor()try:cursor.execute(data_sql)mit()print("数据插入成功")except Error as e:print(e)#查询数据def query_data(conn, query_sql): cursor = conn.cursor()cursor.execute(query_sql)rows = cursor.fetchall()data_output = []for row in rows:data_output.append(row)print(data_output)#更新数据def update_data(conn, update_sql): cursor = conn.cursor()try:cursor.execute(update_sql)mit()print("数据更新成功")except Error as e:print(e)#删除数据def delete_data(conn, delete_sql): cursor = conn.cursor()try:cursor.execute(delete_sql)mit()print("数据删除成功")except Error as e:print(e)#关闭连接def close(connection):connection.close()print("连接已关闭")这些函数封装了我们进行各种数据库操作时需要用到的关键函数,同时支持SQL的各种操作,可以直接通过函数来开发出自己的数据库操作。
sqlalchemy 简单封装SQLAlchemy是一个Python SQL工具和对象关系映射器(ORM)库,它提供了一种简单而强大的方式来在Python中操作数据库。
为了更好地组织和管理数据库操作的代码,我们可以对SQLAlchemy进行简单的封装。
下面是一个示例,展示了如何创建一个简单的SQLAlchemy封装类:```pythonfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerclass Database:def __init__(self, db_uri):self.engine = create_engine(db_uri)self.Session = sessionmaker(bind=self.engine)def connect(self):return self.Session()```在这个示例中,我们首先导入了`create_engine`和`sessionmaker`模块,然后定义了一个名为`Database`的类。
在`__init__`方法中,我们接受一个数据库URI作为参数,并使用`create_engine`函数创建了一个数据库引擎对象。
然后,我们使用`sessionmaker`函数创建了一个会话类。
通过调用`bind`方法并将数据库引擎对象作为参数,我们将会话类绑定到数据库引擎上。
在`connect`方法中,我们返回通过会话类创建的一个会话对象,以便我们可以在其他地方使用它来执行数据库操作。
现在,我们可以使用这个封装类来连接到数据库并执行各种操作。
以下是一个示例:```pythondb = Database('sqlite:///example.db') # 创建一个Database对象session = db.connect() # 连接到数据库# 执行数据库操作result = session.query(User).filter( =='John').first()session.add(some_object)mit()session.close() # 关闭会话```在这个示例中,我们首先创建了一个`Database`对象,传入了一个SQLite数据库的URI。
python操作sqlite⽰例(⽀持多进程线程同时操作)python操作sqlite的⽰例代码:import timeimport threadingimport sqlite3def nomal_producer(conn):'''@summary: producer defination'''counter = 0conn.isolation_level = Noneconn.row_factory = sqlite3.Rowwhile True:# insert to dbcur = conn.cursor()cur.execute("INSERT INTO datas(content, flag) VALUES (?, ?);", ("content %s"%counter, False))counter = counter + 1# mit()time.sleep(0.1)def nomal_consumer(conn):'''@summary: consumer defination'''conn.isolation_level = Noneconn.row_factory = sqlite3.Rowwhile True:# select datacur = conn.cursor()cur.execute("SELECT * FROM datas ORDER BY id LIMIT 10;")records = cur.fetchall()if len(records) > 0:print "begin to delete: "print records# delete recordsfor r in records:conn.execute("DELETE FROM datas WHERE id = ?;", (r["id"], ))time.sleep(0.5)if __name__ == "__main__":# init dbconn = sqlite3.connect('./db.sqlite', check_same_thread = False)# conn = sqlite3.connect('./db.sqlite')# init threadproducer = threading.Thread(target = nomal_producer, args = (conn,))consumer = threading.Thread(target = nomal_consumer, args = (conn,))# start threadsproducer.start()consumer.start()在多进程操作sqlite的⽰例代码中,采⽤producer和consumer的模式来处理,没有特殊之处,但需要注意的是:在建⽴sqlite3的connection 的时候,需要设置check_same_thread = False。
Python读取和处理⽂件后缀为.sqlite的数据⽂件(实例讲解)最近在弄⼀个项⽬分析的时候,看到有⼀个后缀为”.sqlite”的数据⽂件,由于以前没怎么接触过,就想着怎么⽤python来打开并进⾏数据分析与处理,于是稍微研究了⼀下。
SQLite是⼀款⾮常流⾏的关系型数据库,由于它⾮常轻盈,因此被⼤量应⽤程序采⽤。
像csv⽂件⼀样,SQLite可以将数据存储于单个数据⽂件,以便⽅便的分享给其他⼈员。
许多编程语⾔都⽀持SQLite数据的处理,python语⾔也不例外。
sqlite3是python的⼀个标准库,可以⽤于处理SQLite数据库。
⽤sqlite3创建和操作数据库⽂件下⾯,我们来应⽤salite3模块来创建SQLite数据⽂件,以及进⾏数据读写操作。
主要的步骤如下:与数据库建⽴连接,创建数据库⽂件(.sqlite⽂件)创建游标(cursor)创建数据表(table)向数据表中插⼊数据查询数据演⽰代码如下:import sqlite3with sqlite3.connect('test_database.sqlite') as con:c = con.cursor()c.execute('''CREATE TABLE test_table(date text, city text, value real)''')for table in c.execute("SELECT name FROM sqlite_master WHERE type='table'"):print("Table", table[0])c.execute('''INSERT INTO test_table VALUES('2017-6-25', 'bj', 100)''')c.execute('''INSERT INTO test_table VALUES('2017-6-25', 'pydataroad', 150)''')c.execute("SELECT * FROM test_table")print(c.fetchall())Table test_table[('2017-6-25', 'bj', 100.0), ('2017-6-25', 'pydataroad', 150.0)]关于SQLite数据库中数据的可视化预览,有很多的⼯具可以实现,我这⾥使⽤的是SQLite Studio,是⼀个免费使⽤的⼯具,不需要安装,下载下来就可以使⽤,有兴趣的同学可以参考下⾯的链接。
python sqlite3 实例Python SQLite3 实例SQLite是一个轻量级的嵌入式关系数据库,它可以通过Python的sqlite3模块进行操作。
本文将介绍如何使用Python的sqlite3模块进行数据库的连接、创建表、插入数据、查询数据等操作。
1. 连接数据库要使用Python操作SQLite数据库,首先需要导入sqlite3模块,并使用connect()函数连接到数据库。
连接时可以指定数据库文件的路径,如果文件不存在,则会创建一个新的数据库文件。
```pythonimport sqlite3# 连接到数据库conn = sqlite3.connect('example.db')```2. 创建表在SQLite中,可以使用CREATE TABLE语句创建表。
表由行和列组成,每个列都有一个数据类型。
```python# 创建表conn.execute('''CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);''')```3. 插入数据可以使用INSERT INTO语句将数据插入到表中。
插入数据时,可以指定列的值,也可以省略列的值,默认为NULL。
```python# 插入数据conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \VALUES (1, 'Paul', 32, 'California', 20000.00 )")conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \VALUES (2, 'Allen', 25, 'Texas', 15000.00 )") conn.execute("INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY) \VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )") conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )")```4. 查询数据可以使用SELECT语句从表中查询数据。
python访问sqlite封装的常用类实例
在Python中,访问SQLite数据库通常使用封装好的类库,如sqlite3模块提供了对SQLite数据库的底层访问。
SQLite是一
种轻量级的关系型数据库,广泛应用于移动应用和嵌入式系统中。
下面将介绍SQLite数据库的常用类和实例。
1. 连接数据库:
使用sqlite3.connect()函数可以建立与SQLite数据库的连接。
这个函数接受一个参数,表示数据库文件的路径。
如果数据库文件不存在,会自动创建。
示例代码:
```
import sqlite3
conn = sqlite3.connect("test.db")
```
2. 创建表:
使用游标(cursor)对象可以执行SQL语句。
首先,要调用
游标的execute()方法,参数是一条创建表的SQL语句。
然后,调用commit()方法提交事务,确保表结构的改变生效。
示例代码:
```
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
mit()
```
3. 插入数据:
使用INSERT语句可以将数据插入到表中。
首先,要调用游
标的execute()方法,参数是一条插入数据的SQL语句。
然后,调用commit()方法提交事务,确保数据的改变生效。
示例代码:
```
cursor.execute("INSERT INTO students (name, age) VALUES ('Alice', 20)")
mit()
```
4. 查询数据:
使用SELECT语句可以从表中查询数据。
首先,要调用游标
的execute()方法,参数是一条查询数据的SQL语句。
然后,
通过调用游标的fetchone()或fetchall()方法获取查询结果。
示例代码:
```
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
print(row)
```
5. 更新数据:
使用UPDATE语句可以更新表中的数据。
首先,要调用游
标的execute()方法,参数是一条更新数据的SQL语句。
然后,调用commit()方法提交事务,确保数据的改变生效。
示例代码:
```
cursor.execute("UPDATE students SET age = 21 WHERE name = 'Alice'")
mit()
```
6. 删除数据:
使用DELETE语句可以从表中删除数据。
首先,要调用游标的execute()方法,参数是一条删除数据的SQL语句。
然后,调用commit()方法提交事务,确保数据的改变生效。
示例代码:
```
cursor.execute("DELETE FROM students WHERE name =
'Alice'")
mit()
```
以上是对SQLite数据库常用类的简单介绍与示例代码。
通过使用这些类和方法,可以方便地连接数据库、创建表、插入、查询、更新和删除数据。
对于复杂的数据库操作,还可以使用更高级的功能和技巧,如使用参数化查询、使用事务进行批量处理等。
对于SQLite数据库的更多信息,可以查阅相关的文档和教程。