天天看点

笔记mysqlcliet:连接本地MySQL,再导入DataFrame

第一步:连接MySQL,以便执行SQL语句

import MySQLdb as msd
import pandas as pd

conn = msd.connect(host='localhost',                 # 不能使用 hostname
                   port=3306,
                   user='root',                      # 不能使用 username
                   password='写user对应的密码',       # 可以缩写为passwd
                   db='database_name',               # 可以使用database
                   charset='utf8'
                   )
cur = conn.cursor()
           

第二步:输入SQL语句 -> 执行SQL -> 结束

cur.execute("CREATE DATABASE test;")
cur.execute("CREATE TABLE haha(row_1 varchar(20);")
data = cur.execute("SELECT * FROM haha;")  
print(data)                                         # print返回的是“行数”。

# 如果想把SQL结果导入pandas DataFrame,进行如下操作
# SQL = "SELECT * FROM haha;"
# df = pd.read_sql(sql=SQL, con=conn)
# print(df)

cur.close()
conn.close()               
           

附注: 涉及的函数

  • 函数

    pandas.read_sql()

    (官方文档链接)
pandas.read_sql(
                """常用参数"""
                sql,              # 输入SQL
                con,              # 搭建好的sql 链接,如上边案例中的conn=(<blabla>),具体参数见下边的函数
                chunksize         # int类型,默认值是None。指定一次取出来的数据量,避免数据过大导致内不足而不能一次性取出数据
                
                """不常用参数"""
                columns,          # list类型,默认值是None。筛选出我们需要的columns。
                params,           # 可以是list/tuple/dict,默认值是None。根据自己的SQL官方文档,传入的参数
                index_col,        # 可以是string/list,默认值是None。被用来当做index/multiindex。
                coerce_float,     # 把SQL里边的以非数值型保存的数字decimal转化为float。
                parse_dates,      # 可以是list/dict,默认值None。对象是column,详见官方文档。
                )
           

注:SQL中float和decimal的区别(参考链接)

· float和decimal,分别是非标准数据类型和标准数据类型。

· 区别是,float等非标准类型、在DB中保存的是近似值,而decimal则是以字符串的形式保存数值。

  • 函数

    MySQL.connect()

    (文档链接)
MySQL.connect(
              """常用参数"""
              host,                  # 指明要连接的host
              user,                  # 指明登录的用户名
              passwd,                # 指明登录用户的密码
              db,                    # 指明要连接的database
              port,                  # 指明登录的port
              charset,               # 指定字符编码,比如gbk/utf8/unicode等等
              connect_timeout,       # 指明超过X秒之后,放弃链接db
              
              """不常用参数"""
              unix_socket,  
              conv,
              compress,
              named_pipe
              init_command,
              read_default_file,
              read_default_group,
              cursorclass,
              use_unicode,
              sql_mode,
              ssl
              )