python访问数据库的几种方式(pandas、pymysql)

前言
python访问数据库是很常见的需求,我们一般使用pandas里面的函数。因为pandas封装了很多函数来方便我们执行sql语句。在pandas中可以使用read_sql函数进行访问。
另一种方式则是通过第三方包提供的api访问,典型的如pymsql。它则是通过一些数据库的engine连接到数据库,并通过查询时游标寻找的方式来返回数据库中表的数据。

一、pandas访问

import pandas as pd
from sqlalchemy


class connectSql():
    def __init__(self,user,password,host,port,dbName):
        self.user = user
        self.passwrod = password
        self.host = host
        self.port = port
        self.dbName = dbName
        self.engine = create_engine(f'mysql+pymysql://{self.user}:{self.passwrod}@{self.host}:{self.port}/{self.dbName}?charset=utf8')

    def querySql(self,sql):
        sqlDf = pd.read_sql(sql=sql,con=self.engine)
        return sqlDf


if __name__ == '__main__':
    sqlObject = connectSql(usr='root',password='123456',host='xxx.xx.x.xxx',port=3306,dbName='sys')
    sql = '''
        select *
        from test
        limit 1
    '''
    queryDf = sqlObject.querySql(sql)
    print(queryDf)

二、pymysql访问

import pandas as pd
import pymysql


class connectSql():
    def __init__(self,user,password,host,port,dbName):
        self.user = user
        self.passwrod = password
        self.host = host
        self.port = port
        self.dbName = dbName
        self.con = pymysql.connect(host=host, 
                                   user=account, 
                                   password=password, 
                                   database=dbName, 
                                   port=int(port))
    def querySql(self,sql):
        cursor = self.con.cursor()
        cursor.execute(sql)
        res = cursor.fetchall()
        col = [item[0] for item in cursor.description]
        
        df = pd.DataFrame(res,columns=col)
        return df
            
            

if __name__ == '__main__':
    sqlObject = connectSql(usr='root',password='123456',host='xxx.xx.x.xxx',port=3306,dbName='sys')
    sql = '''
        select *
        from test
        limit 1
    '''
    queryDf = sqlObject.querySql(sql)
    print(queryDf)

三、关于写入数据库

其实pandas也支持dataframe写入到数据库中,但是注意是生成dataframe所有数据的整张表(即全量生成)。具体可以看下这篇文章:pandas的to_sql使用

猜你喜欢

转载自blog.csdn.net/zkkkkkkkkkkkkk/article/details/129520073