使用python将数据存入SQLite3数据库

Python从网站上抓取的数据为了可以重复利用,一般都会存储下来,存储方式最简单的会选择存储到文本文件,常见的有方式TXT、CSV、EXCEL等,还有一种方式是将数据存储到数据库,这样也方便管理,常见的关系型数据库有SQLite3、MySQL,非关系型数据库有Redis、MongoDB。那么,这里就简单说明怎么样将数据存储到SQLite3。

假设已经将数据抓取下来并已写入json文件,为了方便本次演练,这里是我自己写的json,防止json写错,这里给出一个地址可自动检测json格式并将其格式化“http://www.bejson.com/”。下图是格式化后的Json格式图。

{

"data":

[

{"id":1,"name":"wangtao","age":21},{"id":2,"name":"lisi","age":22},{"id":3,"name":"wangyang","age":23},{"id":4,"name":"liyang","age":25},{"id":5,"name":"xiaowu","age":25}

]

}

简单的数据库直接使用SQLite3比较方便,而且Python自带SQLite3模块直接导入即可,前面文章《基于Python的SQLite基础知识学习》已经介绍了SQLite3的使用。 

进入主题,取Json文件里的数据,因为是文件流,就需要用到json库里的load方法,把Json对象转化为Python对象,逐行导入sql语句。

sql ="insert into student(id,name,age) values(%d,'%s',%d)"% (line['id'],line['name'],line['age'])

具体步骤如下:

1、逐行读取当前路径下的json文件

with open("data.json",’r’) as f:

              data = json.load(f)

2、对数据进行解析

假设Json为以上data格式,则可通过data[‘id’]data[‘name’] data[‘age’]分别获取idnameage字段。

3、数据入库

利用python内置的sqlite3模块实现对sqlite数据库的操作;注意sql语句中使用了格式化输出的占位符%s%d来表示将要插入的变量,其中%s需要加引号''

# -*- conding:utf-8 -*-
#导入sqlite3库文件
import sqlite3
import json
#数据库存在时,直接连接;不存在时,创建相应数据库,此时当前目录下可以找到对应的数据库文件。
conn = sqlite3.connect("customers.db")
print ('Opened database successfully')
#创建CNAME表
conn.execute('''CREATE TABLE CNAME
      (ID INT PRIMARY KEY     NOT NULL,
      NAME           TEXT    NOT NULL,
      AGE            INT     NOT NULL);''')
print ('Table created successfully')

 

#向表中插入记录

with open("data.json",’r’) as f:

              data = json.load(f)

              for line in data[‘data’]:

              #注意sql语句中使用了格式化输出的占位符%s和%d来表示将要插入的变量,其中%s需要加引号''

              sql = "insert into cname(name,id,age) values('%s',%d,%d)" % (line['name'],line['id'],line['age'])

       conn.execute(sql)

       conn.commit()

              #关闭数据库连接

conn.close()

 

4、查询和确认数据

可以通过sql语句查询和确认数据入库情况。

conn = sqlite3.connect("customers.db")

cursor = conn.execute("select id,name,age  from cname")

for row in cursor:

  print ('ID = ', row[0],'  NAME = ',row[1],'  AGE = ', row[2])

print ('Operation done successfully')

conn.close()

 至此,便将Json格式的数据存储到SQLite3数据库中了,可以进行后续的分析和操作了,下面将代码总结一下,修改便可使用,如若图片看起来不方便,【JiekeXu_IT】公众号后台回复【SQLite3】获取本节源码。

环境说明:基于Ubuntu16.04Python3.5.2版本;关于SQLite3就介绍这么多了,各位小伙伴们下次见哦!


▼往期精彩回顾▼

使用Python爬取《悲伤逆流成河》猫眼信息

(端午节福利)各大影视VIP解析视频观看方法

让我们来聊一聊微信(基于Python分析)

推荐一个好用的PDF阅读器—悦书阅读器

使用Python将图片变成铅笔素描 


JiekeXu之路
### 如何使用 Python 和 Pandas 将 DataFrame 数据保存到 SQLite3 数据库 `to_sql()` 方法是 Pandas 库提供的一种便捷方式,能够将 DataFrame 的数据写入 SQL 数据库[^1]。对于 SQLite3 数据库而言,可以通过 `sqlite3` 模块建立连接并调用该方法完成数据存储。 以下是完整的实现代码及其说明: #### 示例代码 ```python import pandas as pd import sqlite3 # 创建一个示例 DataFrame df = pd.DataFrame({ 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago'] }) # 连接到 SQLite3 数据库(如果文件不存在会自动创建) connection = sqlite3.connect('example.db') # 使用 to_sql 方法将 DataFrame 写入 SQLite 表 df.to_sql('people', con=connection, if_exists='replace', index=False) # 关闭数据库连接 connection.close() ``` --- #### 参数解释 - **`name`**: 要写入的表名,在上述例子为 `'people'`。 - **`con`**: 数据库连接对象,在此案例由 `sqlite3.connect()` 返回。 - **`if_exists`**: 控制当目标表已存在时的行为选项: - `'fail'`: 默认行为,抛出异常。 - `'replace'`: 删除现有表并重新创建新表。 - `'append'`: 向已有表追加数据而不删除原有记录[^2]。 - **`index`**: 是否将 DataFrame 的索引作为单独的一列写入数据库,默认为 `True`;设置为 `False` 则不写入索引[^3]。 --- #### 高级功能扩展 为了支持更复杂的场景,还可以引入 SQLAlchemy 来增强灵活性。例如指定不同的数据库类型或调整性能参数。 ##### 使用 SQLAlchemy 实现相同功能 ```python from sqlalchemy import create_engine import pandas as pd # 定义 DataFrame df = pd.DataFrame({ 'Product': ['Laptop', 'Smartphone', 'Tablet'], 'Price': [999, 499, 299] }) # 创建 SQLite 数据库引擎 engine = create_engine('sqlite:///advanced_example.db') # 导出至 SQLite 表 df.to_sql('products', con=engine, if_exists='replace', index=False) ``` 通过 SQLAlchemy 可以轻松切换其他类型的数据库(如 MySQL 或 PostgreSQL),只需更改 URL 字符串即可[^4]。 --- #### 错误处理与注意事项 在实际应用过程需要注意以下几点: 1. 如果目标表格已经存在于数据库,则需根据需求合理配置 `if_exists` 参数以免引发错误[^5]。 2. 对于大规模数据集推荐分批插入 (`chunksize`) 减少内存占用。 3. 确保字段名称符合所选数据库系统的命名规则。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值