python 数据存储

系统 1346 0

文章目录

  • python常用数据存储方法
    • txt
    • json
    • csv
    • msyql
      • 安装pymysql
      • 连接
      • 建库建表
      • 插入
      • 删除
      • 修改
      • 查询
    • mongodb
      • 安装
      • 连接
      • 建库建文档
    • redis
      • 安装
      • 连接
      • 操作
        • 公用方法
        • 字符串
        • 列表
        • 集合
        • 有序集合
        • 散列
    • 其他
      • sqlalchemy
        • postgresql
        • mysql
        • oracle
        • Microsoft SQL Server
        • sqlite

python常用数据存储方法

txt

            
              
                with
              
              
                open
              
              
                (
              
              
                'test.txt'
              
              
                ,
              
              
                'w'
              
              
                ,
              
              encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    f
              
                .
              
              write
              
                (
              
              
                'sdfasdf'
              
              
                +
              
              
                '\n'
              
              
                )
              
            
          

json

object = json.loads(jsonstr) : json字符串 转化为 python对象

str = json.dumps(objects,indent=2) :python对象 转化为 json字符串

注意:输出中文要设置ensure_ascii为False,还要注意编码

            
              
                with
              
              
                open
              
              
                (
              
              
                'test.txt'
              
              
                ,
              
              
                'w'
              
              
                ,
              
              encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    f
              
                .
              
              write
              
                (
              
              json
              
                .
              
              dumps
              
                (
              
              objects
              
                ,
              
              indent
              
                =
              
              
                2
              
              
                ,
              
              ensure_ascii
              
                =
              
              
                False
              
              
                )
              
              
                )
              
            
          

操作文件

            
              
                import
              
               json


              
                with
              
              
                open
              
              
                (
              
              
                'jiuba.json'
              
              
                ,
              
              
                'w'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    json
              
                .
              
              dump
              
                (
              
              res
              
                .
              
              json
              
                (
              
              
                )
              
              
                ,
              
               f
              
                ,
              
               indent
              
                =
              
              
                2
              
              
                ,
              
               ensure_ascii
              
                =
              
              
                False
              
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                'jiuba.json'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    jiuba_dict 
              
                =
              
               json
              
                .
              
              load
              
                (
              
              f
              
                )
              
            
          

csv

用csv模块写,用pandas.read_csv() 读取很方便

            
              
                import
              
               csv

              
                from
              
               pandas 
              
                import
              
               read_csv


              
                with
              
              
                open
              
              
                (
              
              
                'csv.csv'
              
              
                ,
              
              
                'w'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    writer 
              
                =
              
               csv
              
                .
              
              writer
              
                (
              
              f
              
                ,
              
               delimiter
              
                =
              
              
                ','
              
              
                )
              
              
    writer
              
                .
              
              writerow
              
                (
              
              
                [
              
              
                'id'
              
              
                ,
              
              
                'name'
              
              
                ,
              
              
                'age'
              
              
                ]
              
              
                )
              
              
    writer
              
                .
              
              writerows
              
                (
              
              
                (
              
              
                [
              
              
                '1'
              
              
                ,
              
              
                'bob'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                [
              
              
                '2'
              
              
                ,
              
              
                'amy'
              
              
                ,
              
              
                '21'
              
              
                ]
              
              
                )
              
              
                )
              
              
                # 读写字典格式
              
              
                with
              
              
                open
              
              
                (
              
              
                'dict.csv'
              
              
                ,
              
              
                'w'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    field_headers 
              
                =
              
              
                [
              
              
                'id'
              
              
                ,
              
              
                'name'
              
              
                ,
              
              
                'age'
              
              
                ]
              
              
    writer 
              
                =
              
               csv
              
                .
              
              DictWriter
              
                (
              
              f
              
                ,
              
               fieldnames
              
                =
              
              field_headers
              
                )
              
              
    writer
              
                .
              
              writeheader
              
                (
              
              
                )
              
              
    writer
              
                .
              
              writerow
              
                (
              
              
                {
              
              
                'id'
              
              
                :
              
              
                3
              
              
                ,
              
              
                'name'
              
              
                :
              
              
                'Mike'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                22
              
              
                }
              
              
                )
              
              


df 
              
                =
              
               read_csv
              
                (
              
              
                'csv.csv'
              
              
                )
              
              
                print
              
              
                (
              
              df
              
                )
              
            
          

msyql

安装pymysql

            
              pip install PyMySQL

            
          

To use “sha256_password” or “caching_sha2_password” for authenticate,

you need to install additional dependency:

            
              pip install PyMySQL[rsa]

            
          

连接

单实例连接

            
              db = pymysql.connect(host='127.0.0.1', port=3306,
                         user='root', password='huajian')
cursor = db.cursor()

            
          

建库建表

            
              cursor
              
                .
              
              execute
              
                (
              
              f
              
                'create database if not exists {db_name};'
              
              
                )
              
              
cursor
              
                .
              
              execute
              
                (
              
              f
              
                'use {db_name};'
              
              
                )
              
              
cursor
              
                .
              
              execute
              
                (
              
              
    f
              
                'create table if not exists {table_name}(id varchar(20), sex varchar(30),name varchar(20), age int, primary key (id));'
              
              
                )
              
            
          

插入

            
              data 
              
                =
              
              
                {
              
              
                'id'
              
              
                :
              
              
                '465674646'
              
              
                ,
              
              
                'name'
              
              
                :
              
              
                'Mike'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                25
              
              
                ,
              
              
                'sex'
              
              
                :
              
              
                'Male'
              
              
                }
              
              
                # ================================================
              
              
                # insert ignore 使用唯一约束情况下,存在则不插入,保持原来数据
              
              
                # =================================================
              
              

table_name 
              
                =
              
              
                'xxxx'
              
              
keys 
              
                =
              
              
                ','
              
              
                .
              
              join
              
                (
              
              data
              
                .
              
              keys
              
                (
              
              
                )
              
              
                )
              
              
values 
              
                =
              
              
                ','
              
              
                .
              
              join
              
                (
              
              
                map
              
              
                (
              
              
                lambda
              
               x
              
                :
              
               f
              
                '"{x}"'
              
              
                ,
              
               data
              
                .
              
              values
              
                (
              
              
                )
              
              
                )
              
              
                )
              
              
sql 
              
                =
              
               f
              
                'insert ignore into {table_name}({keys}) values({values});'
              
              
                try
              
              
                :
              
              
    cursor
              
                .
              
              execute
              
                (
              
              sql
              
                )
              
              
    db
              
                .
              
              commit
              
                (
              
              
                )
              
              
                except
              
              
                :
              
              
    db
              
                .
              
              rollback
              
                (
              
              
                )
              
              
                # =================================================
              
              
                # insert update 使用唯一约束情况下,存在则替换,更换为新数据
              
              
                # =================================================
              
              

keys 
              
                =
              
              
                ','
              
              
                .
              
              join
              
                (
              
              data
              
                .
              
              keys
              
                (
              
              
                )
              
              
                )
              
              
values 
              
                =
              
              
                ','
              
              
                .
              
              join
              
                (
              
              
                map
              
              
                (
              
              
                lambda
              
               x
              
                :
              
               f
              
                '"{x}"'
              
              
                ,
              
               data
              
                .
              
              values
              
                (
              
              
                )
              
              
                )
              
              
                )
              
              
update_sql 
              
                =
              
              
                ','
              
              
                .
              
              join
              
                (
              
              
                [
              
              f
              
                '{k} = "{v}"'
              
              
                for
              
               k
              
                ,
              
               v 
              
                in
              
               data
              
                .
              
              items
              
                (
              
              
                )
              
              
                ]
              
              
                )
              
              
sql 
              
                =
              
               f
              
                'insert into {table_name}({keys}) values({values}) on duplicate key update {update_sql};'
              
              
                try
              
              
                :
              
              
    cursor
              
                .
              
              execute
              
                (
              
              sql
              
                )
              
              
    db
              
                .
              
              commit
              
                (
              
              
                )
              
              
                except
              
              
                :
              
              
    db
              
                .
              
              rollback
              
                (
              
              
                )
              
              
        
cursor
              
                .
              
              close
              
                (
              
              
                )
              
              
db
              
                .
              
              close
              
                (
              
              
                )
              
            
          

删除

            
            
          

修改

            
            
          

查询

            
              sql 
              
                =
              
              
                'select * from xtable;'
              
              
cursor
              
                .
              
              execute
              
                (
              
              sql
              
                )
              
              
res 
              
                =
              
               cursor
              
                .
              
              fetchall
              
                (
              
              
                )
              
              
                # res = cursor.fetchone()
              
              
……


              
                # =======================================================
              
              
                # 下面是逐条获取
              
              
                # =======================================================
              
              


sql 
              
                =
              
              
                'select * from xtabel;'
              
              
                try
              
              
                :
              
              
    cursor
              
                .
              
              execute
              
                (
              
              sql
              
                )
              
              
                print
              
              
                (
              
              
                'Count:'
              
              
                ,
              
              cursor
              
                .
              
              rowcount
              
                )
              
              
    row 
              
                =
              
               cursor
              
                .
              
              fetchone
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              row
              
                )
              
              
                while
              
               row
              
                :
              
              
        row 
              
                =
              
               cursor
              
                .
              
              fetchone
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              row
              
                )
              
              
                except
              
              
                :
              
              
                print
              
              
                (
              
              
                'error'
              
              
                )
              
            
          

mongodb

安装

            
              pip install --upgrade pymongo

            
          

连接

            
              client 
              
                =
              
               pymongo
              
                .
              
              MongoClient
              
                (
              
              host
              
                =
              
              
                'localhost'
              
              
                ,
              
               port
              
                =
              
              
                27017
              
              
                )
              
            
          

建库建文档

            
              db = client.test_db
collection = db.test_collection

            
          

            
              collection.insert_one({……})
collection.insert_many({……},{……})

            
          

            
              collection.remove({……})

            
          

            
              # 正常情况:查找,然后修改

# 下面这个,去重插入,
collection.update_one({'id': data1['id']}, {'$set': data1}, True)

            
          

            
              collection.find()
collection.find_one()

collection.find().count()

            
          

redis

安装

            
              pip install redis hiredis

            
          

连接

连接池不需要管关闭的事情

            
              
                import
              
               redis


pool 
              
                =
              
               redis
              
                .
              
              ConnectionPool
              
                (
              
              host
              
                =
              
              
                'localhost'
              
              
                ,
              
              
                            port
              
                =
              
              
                6379
              
              
                ,
              
              
                            db
              
                =
              
              
                15
              
              
                ,
              
              
                            decode_responses
              
                =
              
              
                True
              
              
                )
              
              

r 
              
                =
              
               redis
              
                .
              
              StrictRedis
              
                (
              
              connection_pool
              
                =
              
              pool
              
                )
              
            
          

操作

公用方法

方法 作用 例子
exists() 判断是否存在
delete() 删除一个键
type() 判断键类型
keys(pattern) 获取所有符合规则的键 keys(*)
randomkey() 随机获取一个键
rename(src,dst)
dbsize()
expire(name,time)
ttl()
move(name) 把键移动到其他数据库
flushdb() 清空当前数据库
flushall() 清空所有数据库
expire()

字符串

方法 作用 例子
set
get
getset()
mget()
mset()
incr(name,amount=1)
decr(name, amount=1)
append(key,value)

列表

方法 作用 例子
rpush() 末尾添加一个元素
lpush()
lpop()
rpop()
llen(name)
lrange(name,start,end)
lindex(name,index)
lset(name,index,value) lset(‘list’,1,5) 索引为1的元素,赋值为5
lrem(name.count,value) lrem(‘list’,2,3) 删除两个3

集合

方法 作用 例子
sadd(setname,*values)
srem(setname,*values)
spop(setname)
smove(src,dst,value) 把value移动到另外一个集合中去
scard(name) 获取元素个数
sismember(setname,value) 判断
sinter([setname,setname,……]) 返回交集
sunion([setname,setname,……]) 返回并集
sdiff([setname,setname,……]) 返回差集
smembers(setname) 查看全部元素
srandmember(setname) 随即返回一个元素,不删除

有序集合

方法 作用 例子
zadd() zadd(‘grade’,100,‘bob’,98,‘mike’)
zrem() zrem(‘grade’,‘Mike’)
zincrby() zincrby(‘grade’,‘bob’,-2)
zrank(setname,value) 返回名次,从小到大排序 zrank(‘grade’,‘amy’)
zrevrank(setname,value) 返回名词,从大到小排序
zrevrange(setname,start,end) zrevrange(‘grade’,0,3)
zrangebyscore(setname,start,end) zrangebyscore(‘grade’,85,100)
zcount(setname,min,max) min->max之间的个数
zcard(setname) 返回个数
zremrangebyrank(setname,min,max) 删除
zremrangebyscore(setname,min,max) 删除元素

散列

方法 作用 例子
hset() hset(‘price’,‘cake’,5)
hget()
hmset()
hmget()
hincrby()
hexists()
hdel()
hlen()
hkeys()
hvals()
hgetall()

其他

sqlalchemy

              
                dialect+driver://username:password@host:port/database

              
            

例如:

            
              
                from
              
               sqlalchemy 
              
                import
              
               create_engine
engine 
              
                =
              
               create_engine
              
                (
              
              
                "mysql://scott:tiger@hostname/dbname"
              
              
                ,
              
              
                            encoding
              
                =
              
              
                'latin1'
              
              
                ,
              
               echo
              
                =
              
              
                True
              
              
                ,
              
               pool_size
              
                =
              
              
                10
              
              
                )
              
            
          

例子:

            
              
                from
              
               sqlalchemy 
              
                import
              
               create_engine


DB_NAME 
              
                =
              
              
                'only_test'
              
              
TABLE_NAME 
              
                =
              
              
                'students'
              
              
DB_URI 
              
                =
              
               f
              
                'mysql://root:huajian@localhost:3306/{DB_NAME}'
              
              


engine 
              
                =
              
               create_engine
              
                (
              
              DB_URI
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                ,
              
               echo
              
                =
              
              
                True
              
              
                )
              
              
conn 
              
                =
              
               engine
              
                .
              
              connect
              
                (
              
              
                )
              
              

sql_cre_table 
              
                =
              
               f
              
                '''
create table if not exists {TABLE_NAME}(
    id int(11) auto_increment,
    name varchar(20),
    age int,
    grade int,
    primary key (id)
)
'''
              
              

sql_insert_1 
              
                =
              
               f
              
                'insert ignore into {TABLE_NAME}(name,age,grade) values ("bob",21,98);'
              
              
sql_insert_2 
              
                =
              
               f
              
                'insert ignore into {TABLE_NAME}(name,age,grade) values ("amy",21,98);'
              
              
                # 一次性commit
              
              
                with
              
               conn
              
                .
              
              begin
              
                (
              
              
                )
              
              
                as
              
               trans
              
                :
              
              
    conn
              
                .
              
              execute
              
                (
              
              sql_cre_table
              
                )
              
              
    conn
              
                .
              
              execute
              
                (
              
              sql_insert_1
              
                )
              
              
    conn
              
                .
              
              execute
              
                (
              
              sql_insert_2
              
                )
              
              
    res 
              
                =
              
               conn
              
                .
              
              execute
              
                (
              
              
                'select count(*) from region_new;'
              
              
                )
              
              
                for
              
               i 
              
                in
              
               res
              
                :
              
              
                print
              
              
                (
              
              i
              
                )
              
              
    trans
              
                .
              
              commit
              
                (
              
              
                )
              
            
          

postgresql

            
              # default
engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')

# psycopg2
engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')

# pg8000
engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')

            
          

mysql

            
              # default
engine = create_engine('mysql://scott:tiger@localhost/foo')

# mysqlclient (a maintained fork of MySQL-Python)
engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

# PyMySQL
engine = create_engine('mysql+pymysql://scott:tiger@localhost/foo')

            
          

oracle

            
              engine = create_engine('oracle://scott:tiger@127.0.0.1:1521/sidname')

engine = create_engine('oracle+cx_oracle://scott:tiger@tnsname')

            
          

Microsoft SQL Server

            
              # pyodbc
engine = create_engine('mssql+pyodbc://scott:tiger@mydsn')

# pymssql
engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')

            
          

sqlite

            
              engine = create_engine('sqlite:///foo.db')

# to use a SQLite :memory: database, specify an empty URL:
engine = create_engine('sqlite://')

            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论