pandas 读写sql数据库

如何从数据库中读取数据到DataFrame中?pandas提供这这样的接口完成此工作——read_sql()。下面我们用离子来说明这个方法。

  1. 我们要从sqlite数据库中读取数据,引入相关模块

  2. read_sql接受两个参数,一个是sql语句,这个你可能需要单独学习;一个是con(数据库连接)、read_sql直接返回一个DataFrame对象

  3. 打印一下,可以看到已经成功的读取了数据

  4. 我们还可以使用index_col参数来规定将那一列数据设置为index

  5. 结果输出为:

  6. 当然,我们可以设置多个index,只要将index_col的值设置为列表

  7. 输出结果为:

  8. 写入数据库也很简单,下面第二句用于删除数据库中已有的表"weather_2012",然后将df保存到数据库中的"weather_2012"表

  9. 假如我们使用的是mysql数据库也没问题,我们只需要建立与mysql的连接即可,用下面的con代替上面的con可以达到的效果相同。

补充:

(1)DateFrane 可以将结果转换成DataFrame

import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1')
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS test")#必须用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,)
aa=pd.DataFrame(df)
print aa
DataFrame 可以将结果转换成DataFrame

(2)存储

pd.io.sql.write_frame(df, "user_copy", conn)#不能用已经移除

pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='replace')#必须制定flavor='mysql'

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1')
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS user_copy")#必须用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,chunksize=2)
for piece in df:
    aa=pd.DataFrame(piece)
    # pd.io.sql.write_frame(df, "user_copy", conn)#不能用已经移除
    pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='replace')#必须制定flavor='mysql'
从一个数据库读取存储到另一个数据库

 (3)根据条件添加一列数据

piece['xb'] = list(map(lambda x: '男' if x == '123' else '女', piece['pwd']))

(4)如果有汉字,链接时必须知道字符类型   charset="utf8"

(5)最后实现代码(迭代读取数据,根据一列内容新增一列,)

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1',charset="utf8")
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS user_copy")#必须用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,chunksize=2)
for piece in df:
    # pd.io.sql.write_frame(df, "user_copy", conn)#不能用已经移除

    piece['xb'] = list(map(lambda x: '' if x == '123' else '', piece['pwd']))
    print(piece)

    pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='append')#必须制定flavor='mysql'
最后代码

 

 (7)sqlalchemy链接  需要制定一些中文 create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/jd?charset=utf8", max_overflow=5)

# 用sqlalchemy链接
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/db1?charset=utf8")
sql = "select * from user"
df = pd.read_sql(sql,engine,chunksize=2)
for piece in df:
    print(piece)
    pd.io.sql.to_sql(piece, "user_copy", engine, flavor='mysql', if_exists='append')
sqlalchemy链接

 

 

 

 

 

 

 

 

posted @ 2016-09-05 16:29  若时光搁浅  阅读(9798)  评论(0编辑  收藏  举报