python pandas dataframe to_sql创建数据库

1.安装pandas , sqlalchemy ,pymysql

 #将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理
 #coding=utf-8
 import pandas as pd
 import pymysql                                                                    #数据库模块
 pymysql.install_as_MySQLdb()                                           #引入mysqldb不然会出错
 from sqlalchemy import create_engine  #引入sqlalchemy   #引擎
 #创建连接
 yconnect = create_engine('mysql+mysqldb://root:password@localhost:3306/database?charset=utf8')
 #创建数据库
 pd.io.sql.to_sql(thedataframe,'pandasda', con=yconnect, schema='db_py', if_exists='append')

参数说明

mysql为要连接的数据库为mysql关系型数据库
root:为mysql连接账户名
password:为mysql连接的密码,比如root

yconnect = create_engine(‘mysql+mysqldb://root:root@localhost:3306/db_py?charset=utf8′)

  • localhost为本机的数据库
  • 3306为MySQL数据库的端口号
  • database为数据库名称,比如

yconnect = create_engine(‘mysql+mysqldb://root:root@localhost:3306/db_py?charset=utf8′)

【重点】thedataframe有两种类型,一种为序列,另一种为dataframe格式

例:

序列格式

import pandas as pd
df=pd.Series(['1','2','3'],index=["q","w","e"])
#将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理
yconnect = create_engine('mysql+mysqldb://root:root@localhost:3306/db_py?charset=utf8')
pd.io.sql.to_sql(df,'pandasda', con=yconnect, schema='db_py', if_exists='append')

dataframe形式

这里用我写过的爬取拉钩为例

#coding=utf-8
import pandas as pd
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
# 引入需要的模块
import json  # 使用json解码 因为拉勾网的格式是json
import requests  # 使用这个requests是得到网页源码
import pandas  # 使用这个数据进行存储
import openpyxl

items = []  # 定义空列表用来存放你得到的数据
#  循环两页 这里爬取的是两页内容
for i in range(1, 2):
    # 传入data 因为这个url是post的请求方法 pn指的是页数 kd指的是你搜索的内容
    # 反爬虫必要的参数要加
    data = {'first': 'true', 'pn': i, 'kd': 'python'}
    headers = {
    "Referer": "https://www.lagou.com/jobs/list_python?px=default&city=全国",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
    }
    # 拉钩网的链接是固定的就变化的是页数 因为是post的提交方法 所以传入data
    yuan = requests.post(
        'https://www.lagou.com/jobs/positionAjax.json?               px=default&needAddtionalResult=false&isSchoolJob=0',
    data=data, headers=headers).content
    # 使用json进行解码 因为返回的是一个json的格式
yuan = json.loads(yuan)
# 得到14个数据
for i in range(14):
    item = []
    # 看下面的图片item里面的是什么数据
    item.append(yuan['content']['positionResult']['result'][i]['positionName'])
    item.append(yuan['content']['positionResult']['result'][i]['companyFullName'])
    item.append(yuan['content']['positionResult']['result'][i]['salary'])
    item.append(yuan['content']['positionResult']['result'][i]['city'])
    item.append(yuan['content']['positionResult']['result'][i]['positionAdvantage'])
    items.append(item)
    #  使用的是pands的存数据 存为xlsx就是excel格式
data = pandas.DataFrame(items)
#将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为    utf8,否则有些latin字符不能处理
yconnect = create_engine('mysql+mysqldb://root:root@localhost:3306/db_py?charset=utf8')
pd.io.sql.to_sql(data,'pandasda', con=yconnect, schema='db_py', if_exists='append')

有问题,记得留言哦!

    原文作者:Py_Explorer
    原文地址: https://www.jianshu.com/p/22fa43934c9b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞