pandas是一个强大的Python工具包,能够快速帮助我们做很多数据处理。但是在利用pandas连接数据库时,也会遇到很多问题,在此我总结了一个相对较为简单的连接范式,供大家参考学习。
先上代码:
- import pandas as pd
-
- # 数据库参数
- MYSQL_USER = 'root'
- MYSQL_PASS = '****' # 你的密码
- MYSQL_HOST = "localhost" # 你的host
- MYSQL_PORT = 3306
- MYSQL_CHARSET = 'utf8mb4' # 数据库编码格式
-
- # 数据库名称
- MYSQL_DATABASE = "system"
-
- import pymysql
- from sqlalchemy import create_engine
-
- # url
- MYSQL_DATABASE_URL = fr"mysql+pymysql://{MYSQL_USER}:{MYSQL_PASS}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset={MYSQL_CHARSET}"
- # 创建引擎
- engine = create_engine(MYSQL_DATABASE_URL)
-
- # 数据库调用函数
- def access_db(sql, data=None, is_many=False):
- '''
- :param sql: sql执行语句
- :param data: 数据,如果没有数据则执行sql代码
- :param is_many: 是否为多条数据
- :return: 查询数据
- '''
- conn = pymysql.connect(host=MYSQL_HOST, port=MYSQL_PORT, user=MYSQL_USER,
- password=MYSQL_PASS, db=MYSQL_DATABASE, charset=MYSQL_CHARSET)
- cur = conn.cursor()
-
- if is_many:
- try:
- cur.executemany(sql, data)
- conn.commit()
- except Exception as e:
- print(e)
- conn.rollback()
- elif data:
- try:
- cur.execute(sql, data)
- conn.commit()
- except Exception as e:
- print(e)
- conn.rollback()
- else:
- cur.execute(sql)
- exe_data = cur.fetchall()
- conn.commit()
- return exe_data
- cur.close()
- conn.close()
-
- # 查询数据
- sql = "select * from user"
- df_user = pd.read_sql(sql=sql, con=engine)
- print(df_user)
上述代码中用到的函数,在查询语句,插入语句(一次可插入一条或多条)等方面都可以直接调用,但需要确保sql语句的正确性,注意更改数据库参数为你自己需要连接的数据库,sql建议在代码调用前最好直接在数据库进行过查询并能够获取到正确的数据再放入代码层,避免因为一些基本语法问题导致问题定位浪费时间和精力。