pandas数据保存至Mysql数据库

pandas数据保存至Mysql数据库 

import pandas as pd
from sqlalchemy import create_engine
host = '127.0.0.1'
port = 3306
db = 'test'
user = 'root'
password = '********'
engine = create_engine(str(r'mysql mysqldb://%s:' '%s' '@%s/%s') % (user, password,
host, db))
try:
   df = pd.DataFrame([[1,'x'],[2,'y']],columns=list('ab'))
   df.to_sql('test1',con=engine,if_exists='replace',index=False)
except Exception as e:
   print(e)

to_sql参数

参数:
name : string

SQL表的名称。

con : sqlalchemy.engine.Engine或sqlite3.Connection

使用SQLAlchemy可以使用该库支持的任何数据库。为sqlite3.Connection对象提供了旧版支持。

schema : string,optional

指定模式(如果数据库flavor支持此模式)。如果为None,请使用默认架构。

if_exists : {'fail','replace','append'},默认'fail'

如果表已存在,如何表现。

  • 失败:引发ValueError。
  • replace:在插入新值之前删除表。
  • append:将新值插入现有表。
index : bool,默认为True

将DataFrame索引写为列。使用index_label作为表中的列名。

index_label : 字符串或序列,默认为None

索引列的列标签。如果给出None(默认值)且 index为True,则使用索引名称。如果DataFrame使用MultiIndex,则应该给出一个序列。

chunksize : int,可选

行将一次批量写入此大小。默认情况下,所有行都将立即写入。

dtype : dict,可选

指定列的数据类型。键应该是列名,值应该是SQLAlchemy类型或sqlite3传统模式的字符串。

方法 : {无,'多',可调用},默认无

控制使用的SQL插入子句:

  • 无:使用标准SQL INSERT子句(每行一个)。
  • 'multi':在单个INSERT子句中传递多个值
  • 可以签名(pd_table, conn, keys, data_iter)

可以在插入方法部分中找到详细信息和示例可调用实现

版本0.24.0中的新功能。

举:
ValueError异常

当表已经存在且if_exists为'fail'时(默认值)。

参考链接:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

 

应用场景

1建立tcp一次长连接,发送数据端:每隔5s发送一次json数据,接受数据端:接收数据,进行数据处理,存储数据

server

import socket
import pandas as pd
from sqlalchemy import create_engine

sk = socket.socket()

sk.bind(('127.0.0.1',8000))

sk.listen(2)

con,addr = sk.accept()
# print(addr,con)
engine = create_engine('mysql+pymysql://root:@127.0.0.1:3306/db1')
while True:
    msg = con.recv(8048).decode()

    df = pd.read_json(msg,dtype={'code':'str'})
    # 删除parentId列
    df.drop(['parentId'],axis=1,inplace=True)
    # 修改id为cid
    df1 = df.rename(columns={'id':'cid'})
    # print(df1)
    try:
       # df = pd.DataFrame([[1,'x'],[2,'y']],columns=list('ab'))
       df1.to_sql('test1',con=engine,if_exists='append',index=False)
    except Exception as e:
        print(e)

client

import socket
import time
import re
import requests
import json
import pandas as pd

sk = socket.socket()
sk.connect(('127.0.0.1',8000))
url = 'https://www.lagou.com/lbs/getAllCitySearchLabels.json'
heards = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Safari/537.36'
}
cont = requests.get(url=url, headers=heards).text
while True:
    cont1 = re.findall('\[.+?\]', cont)
    for i in cont1:
        sk.send(i.encode('utf8'))
        time.sleep(5)

 

posted @ 2019-03-31 00:59  神秘嘉宾7m  阅读(636)  评论(0编辑  收藏  举报