python数据存储技巧

1.文本存储

比如我们现在有10篇文章,每篇文章由三部分组成,题目,作者,内容(title,author,content),然后要求这三个部分明确展示出来,并且每篇文章之间用=====分割。

大致思路:

针对每篇文章的三个部分,前两个部分归为一行,然后每篇文章之间用=====分割。

代码实现

items表示那10篇文章每一篇文章用item表示,则有,

for item in items:
title=item[0]
author=item[1]
content=item[2]
insertlist=[title,author,content]
with open("1.text",'a',encoding='utf-8') as fs:
fs.write('\n'.join(insertlist)) #构建列表,用join的分割符用\n
fs.write('\n'+'='*60='\n')

2.Json的存储

千万要注意,json字符串需要用双引号

import json
with open('data.json','w','encoding='utf-8') as fs:
fs.write(json.dumps(data,indent=2,ensure_ascii=False))

其中indent,代表缩进字符个数,如果不加就没有json的层次感了,json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False。

3.CSV的存储

利用python第三方模块pandas,调用DataFrame对象的to_csv方法将数据保存到csv

import pandas as pd
df=pd.DataFrame(字典字典类型的数据)
df.to_csv('weiboi.csv', encoding='gb2312', index = False) #insert into csv

4.mysql-动态sql语句

传入一个动态变化的字典即可。

比如说一开始的时候我们有这样的一个表叫user,需要保存三个字段id,name,age然后我们可以构建下面的字典和表名

d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'

d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'INSERT INTO {table}({keys})VALUES({values})'
try:
if cursor.execute(sql,tuple(d.values())):
print('ok')
db.commit()
except:
print('no')
db.rollback()
db.close()

现在我们就完成了插入操作,但是有的时候我们需要 主键存在是更细,不存在时插入怎么办呢,首先我们看下面语句

INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s

ON DUPLICATE KEY UPDATE 可以达到以下目的:

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。

否则插入一条新的记录。

然后我们对上面整体做一个代码整理。如下

d={'id':'1001','name':'zhangsan','age':'17'}  

tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables}({keys})VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}={v}" for k,v in data_dic.items()])
sql += update
try:
if cursor.execute(sql,tuple(d.values())):
print('ok')
db.commit()
except:
print('no')
db.rollback()
db.close()

  

同样的如果你懂pandas,你可以这样

 pd.io.sql.to_sql(datatosql, 'tablename', yconnect, schema='ptos', if_exists='append')
上一篇:Delphi 7调用C语言编写的DLL


下一篇:[iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储