前言
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使用