• 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('
    '.join(insertlist)) #构建列表,用join的分割符用
    
                   fs.write('
    '+'='*60='
    ')
    

    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')
  • 相关阅读:
    phpMyAdmin cannot login to mysql server
    emulation 与 simulation 的区别
    C++类构造函数中的成员初始化
    KEY IDEA For Topology-based Analysis
    NOTES ON [Efficient and Cost-Effective Hybrid Congestion Control for HPC Interconnection Networks]
    Install Google Chrome On Ubuntu 14.04
    idea 远程debug调试
    癌细胞作用于身体
    应用高cpu高内存占用
    Jackson总结:常用注解、整合spring、自定义JsonSerializer
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9014897.html
Copyright © 2020-2023  润新知