当前位置: 首页 > 后端技术 > Python

聊聊python数据处理全家桶(Sqlite篇)

时间:2023-03-25 20:02:13 Python

作者:新干果来源:AirPython聊聊python中的Redis,本文继续聊聊另一个常用的数据库:Sqlite。Sqlite是一个嵌入式数据库。数据库是一个很小的文件。底层用C语言编写,经常集成到移动应用中。其实python内置了一个sqlite3模块,可以直接运行,不需要安装任何依赖。Sqlite数据库——准备类似于Python对Mysql的操作,对Sqlite的操作主要有以下两种方法:sqlite3+nativeSQLSQLAlchemy+ORM——sqlite3+nativeSQL由于Python内置了sqlite3模块,直接可以在这里导入它。导入内置模块sqlite3importsqlite3首先,我们使用sqlite3的connnect()方法创建一个数据库连接对象。如果数据库不存在,会自动在相应目录下创建数据库文件,用于创建数据库连接对象。如果数据库不存在,它会自动创建一个数据库文件。指定其他参数,包括:timeoutself.conn=sqlite3.connect(self.path_db)然后,通过数据库连接对象获取操作数据库的游标实例获取操作数据库的游标对象self.cursor=self.conn。cursor()接下来使用数据库连接对象执行建表SQL语句,在数据库中新建一张表createatableSQL_CREATE_TABLE='''CREATETABLEIFNOTEXISTSPEOPLE(IDINTPRIMARYKEYNOTNULL,NAMETEXTNOTNULL,AGEINTNOTNULL);'''defcreate_db_table(self):"""初始化表:return:"""self.conn.execute(SQL_CREATE_TABLE)接下来我们对数据表进行增删改查操作,修改和检查。以单条数据和多条数据为例。对于单条数据的插入,只需要写一个插入的SQL语句,然后执行上面数据库连接对象的execute(sql)方法作为参数,最后使用数据库连接的commit()方法object将数据提交到数据库并插入一条数据pieceofdata"""try:self.conn.execute(SQL_INSERT_ONE_DATA)必须提交才能正确执行self.conn.commit()除了Exceptionase:self.conn.rollback()print('Insertarecordfailed,rollback~')需要注意的是,insert操作往往是由于主键原因导致出现新的异常,所以需要捕获异常并进行回滚操作。使用数据库连接对象的executemany()方法传入插入的SQL语句和位置变量列表,这样就可以一次插入多条数据。插入多条数据(3个变量,包括:id、name、value)SQL_INSERT_MANY_DATA='INSERTINTOPEOPLE(id,name,age)VALUES(?,?,?);'要插入的数据self.data=[(4,'张三',11),(5,'李四',12),(6,'王舞',13)]definsert_many(self,data):"""添加多条数据"""try:self.conn.executemany(SQL_INSERT_MANY_DATA,data)self.conn.commit()exceptExceptionase:self.conn.rollback()print('插入多条记录失败,回滚~')2.Query分为两步,即:通过游标对象执行查询的SQL语句,调用游标对象的方法获取查询结果例如:获取所有数据,可以使用游标对象的fetchall()方法获取第一个满足条件的数据,可以使用fetchone()方法。此外,fetchmany(num)可以查询固定数量的数据。查询SQL语句SQL_QUERY_ONE_DATA="SELECT*FROMPEOPLEWHEREid={}"defquery_one(self,id):"""查询一条数据:paramid::return:"""self.cursor.execute(SQL_QUERY_ONE_DATA.format(id))fetchone():查询第一条数据fetchall():查询所有数据fetchmany(1):查询固定数量的数据result=self.cursor.fetchall()print(type(result))print(result)3.update操作和new操作类似。update操作也是通过数据库连接对象执行更新的SQL语句,最后执行submit操作将真正的数据Update到数据表中以更新一条记录为例,更新数据SQL_UPDATE_ONE_DATA="UPDATEPEOPLESETNAME='{}',AGE={}whereid={}"defupdate_one(self,id,name,age):"""修改一条记录:paramid::paramname::paramage::return:"""sql_update=SQL_UPDATE_ONE_DATA.format(name,age,id)print(sql_update)self.conn.execute(sql_update)self.conn.commit()4.删除删除操作类似于查询和添加操作,只需要执行删除SQL语句删除某条记录即可,例如删除数据SQL_DEL_ONE_DATA="DELETEFROMPEOPLEwhereid={}"defdel_one(self,id):"""通过id删除一条数据"""sql_del=SQL_DEL_ONE_DATA.format(id)self.conn.execute(sql_del)self.conn.commit()最后我们还需要将游标对象连接到数据库对象,释放资源defteardown(self):关闭游标和数据库连接,避免资源浪费self.cursor.close()self.conn.close()——SQLAlchemy+ORM使用SQLAlchemy操作sqlite数据库也需要先安装依赖库依赖包pip3installsqlalchemy通过内置方法declarative_ba创建基类Basese(),然后自定义一个Base类的子类,通过定义静态变量在内部指定表名和表字段。fromsqlalchemyimportColumn,Integer,String,create_enginefromsqlalchemy.ext.declarativeimportdeclarative_basebaseclassBase=declarative_base()自定义表类People(Base):表名tablename='people'definefieldid=Column(Integer,primary_key=True)name=Column(String)age=Column(Integer)def__repr__(self):"""轻松打印结果:return:"""return"