利用Python连接本地MySQL

1. 连接本地数据库

import pymysql
# 连接本地MySQL:指定用户名、密码以及需要使用的数据库(student_info)
connector = pymysql.connect(host="127.0.0.1", user="root",password="123456",database="studenfts_info",charset="utf8")
  • pymysql.connect中的参数:
host=None,# 要连接的主机地址, 本机上的 MySQL 使用 127.0.0.1
user=None,# 用于登录的数据库用户名, 例如 root.
password='',# 上述账号的相应密码
database=None,# 要连接的数据库,本教程使用的是来源于<SQL 基础教程>的 shop 数据库
port=0,# 端口,一般为 3306
unix_socket=None,# 选择是否要用 unix_socket 而不是 TCP/IP
charset='',# 字符编码, 需要支持中文请使用"utf8"
sql_mode=None,# Default SQL_MODE to use.
read_default_file=None,# 从默认配置文件(my.ini 或 my.cnf)中读取参数
conv=None,# 转换字典
use_unicode=None,# 是否使用 unicode 编码
client_flag=0,# Custom flags to send to MySQL. Find potential values in constants.CLIENT.
cursorclass=,# 选择 Cursor 类型
init_command=None,# 连接建立时运行的初始语句
connect_timeout=10,# 连接超时时间,(default: 10, min: 1, max: 31536000)
ssl=None,# A dict of arguments similar to mysql_ssl_set()'s parameters.For now the capath and cipher arguments are not supported.
read_default_group=None,# Group to read from in the configuration file.
compress=None,# 不支持
named_pipe=None,# 不支持
no_delay=None,#
autocommit=False,# 是否自动提交事务
db=None,# 同 database,为了兼容 MySQLdb
passwd=None,# 同 password,为了兼容 MySQLdb
local_infile=False,# 是否允许载入本地文件
max_allowed_packet=16777216,# 限制 `LOCAL DATA INFILE` 大小
defer_connect=False,# Don't explicitly connect on contruction - wait for connect call.
auth_plugin_map={},#
read_timeout=None,#
write_timeout=None,
bind_address=None# 当客户有多个网络接口,指定一个连接到主机

2. 创建游标对象并执行SQL语句

cursor = connector.cursor()
# 定义需要执行的sql语句:
sql = "show tables;"
# 执行sql语句
cursor.execute(sql);
# 取出运行结果
result = cursor.fetchall()
  • 以上例子的运行结果
  • 在举个例子:取出grade_info表中的所有数据
import pymysql
# 连接本地MySQL:指定用户名、密码以及需要使用的数据库(student_info)
connector = pymysql.connect(host="127.0.0.1", user="root",password="123456",database="students_info",charset="utf8")
cursor = connector.cursor()
# 定义需要执行的sql语句:
sql1 = "desc grade_info;"
# 执行sql语句
cursor.execute(sql1);
# 取出运行结果
result1 = cursor.fetchall()

sql2 = "select * from grade_info;"
cursor.execute(sql2)
result2 = cursor.fetchall()

# 关闭游标
cursor.close()
# 关闭数据库连接
connector.close()

python建立本地数据库 python 本地数据库_python建立本地数据库


python建立本地数据库 python 本地数据库_sql_02


python建立本地数据库 python 本地数据库_python_03

python建立本地数据库 python 本地数据库_python建立本地数据库_04

3. 利用pandas来执行sql

  可以看出,采用以上命令得到的结果看起来并不是很美观,且在我们需要使用其中的数据时不好操作(当然,可以采用pandas将其转化为数据框,但是相较于接下来的操作要麻烦一些),因此可以采用pandas来直接读取其中的sql语句,而不需要建立游标:

import pymysql
import pandas as pd
# 连接本地MySQL:指定用户名、密码以及需要使用的数据库(student_info)
connector = pymysql.connect(host="127.0.0.1", user="root",password="123456",database="students_info",charset="utf8")
cursor = connector.cursor()
# 定义需要执行的sql语句:
sql1 = "desc grade_info;"
# 取出运行结果
result1 = pd.read_sql(sql1,connector)

sql2 = "select * from grade_info;"
result2 = pd.read_sql(sql2,connector)
  • 得到最终的结果

4. 使用函数封装数据库连接操作

from pandas import read_sql
from pymysql import connect
def conn2mysql(sql):
    """
    函数的参数为一个字符串类型的 SQL 语句
    返回值为一个 DataFrame 对象
    """
    
    # 连接本机上的MySQL服务器中的students_info数据库
    connector = connect(host="127.0.0.1", user="root",password="123456",database="students_info",charset="utf8")
    # 使用 pandas 的 read_sql 函数执行 SQL 语句并取回检索结果
    result=read_sql(sql,connector )
    # 关闭数据库连接
    connector.close()
    return result
# 执行函数
sql1 = "SHOW TABLES;"
result1 = conn2mysql(sql1)

sql2 = "SELECT * FROM grade_info;"
result2 = conn2mysql(sql2)

python建立本地数据库 python 本地数据库_数据库_05


python建立本地数据库 python 本地数据库_mysql_06