Python操作MySQL -即pymysql/SQLAlchemy用法

python 采用sqlalchemy 或者pymysql连接数据库  如果出现中文乱码   建议大家注意UTF-8的设置

前者可以直接创建dataframe  后者读取的数据需要转换

sqlalchemy文档http://pandas.pydata.org/pandas-docs/stable/io.html#advanced-sqlalchemy-queries

pymysql实例文档;https://github.com/PyMySQL/PyMySQL/blob/master/docs/source/user/examples.rst


# -*- coding: utf-8 -*-
"""
Created on Tue Nov  7 12:38:21 2017

@author: lizheng
"""

import pymysql
import pandas as  pd
"""
使用sqlalchemy结合pymysql 方式读取数据库
# =============================================================================
# MySQL-Python
#     mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
#   
# pymysql
#     mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
#   
# MySQL-Connector
#     mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
#   
# cx_Oracle
#     oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
#   
# 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html
# =============================================================================
"""
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:****@192.**.**.***:3***/tbl_***?charset=utf8')#创建引擎的时候添加编码信息?charset=utf8

#df = pd.read_sql("select * from tbl_****",engine,chunksize=40)
#df =pd.read_sql_query("select * from tbl_goods_name",engine,chunksize=40)
df = pd.read_sql_table("tbl_goods_name",engine,chunksize=40)

for chunk in df:
   print(chunk)
    
"""
直接用pymysql。读取数据然后转换成dateFrame 
直接获取的是tuple元祖数据,先转换成list,然转换成dateFrame
"""   
#连接数据库
conn = pymysql.connect(host='*******',port= ***,user = '***',passwd='******',db='tbl*****',charset='utf8') #db:库名

# 执行sql语句
try:
    with conn.cursor() as cursor:
        sql="select * from tbl****** "
        cursor.execute(sql)
        result=cursor.fetchall() 

finally:
    conn.close();


# =============================================================================
# #创建游标
# cur = conn.cursor()
# #查询tbl_goods_nam表中存在的数据
# cur.execute("select * from tbl_**** limit 100")
# #fetchall:获取tbl_goods_nam表中所有的数据
# result = cur.fetchall()
# #获取tbl_*****表中前三行数据
# ret2 = cur.fetchmany(3)
# print(ret2)
# print("------------------------------")
# #获取tbl_*****表中第一行数据
# ret3= cur.fetchone()
# print(ret3)
# =============================================================================
df1=pd.DataFrame(list(result))#tuple 转dateframe
df1.columns = ['id','hwmc','ggxh'] #names重命名




print(result)
print("----------------------")


猜你喜欢

转载自blog.csdn.net/qq_36603091/article/details/78467495