Python连接MySQL数据库的多种方式

本次代码实现连接远程服务器
由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。
目前,MySQL驱动有几种:
mysql-connector-python:是MySQL官方的纯Python驱动;
MySQL-python:是封装了MySQL C驱动的Python驱动。
安装MySQL驱动:
pip install mysql-connector-python
测试是否安装成功,测试python下是否可成功导入mysql.connector即可(import mysql.connector)
pip install MySQL-python (不支持python3)
测试是否安装成功,测试python下是否可成功导入MySQLdb即可(import MySQLdb)
pip install mysqlclient (mysqlclient 完全兼容MySQLdb,同时支持python3)
测试是否安装成功,测试python下是否可成功导入MySQLdb即可(import MySQLdb)
pip install PyMySQL
测试是否安装成功,测试python下是否可成功导入pymysql即可(import pymysql)

方式一:pandas中使用SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行SQLAlchemy模块提供了create_engine()函数用来初始化数据库连接,SQLAlchemy用一个字符串表示连接信息:'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
我们需要以下三个库来实现Pandas读写MySQL数据库:
pandas
sqlalchemy
pymysql

image.png

import pandas as pd
import pymysql
from sqlalchemy import create_engine
# 初始化数据库连接,使用pymysql模块
# MySQL的用户:root, 密码:147369, 端口:3306,数据库:test
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test'charset=utf8)
# 查询语句,查询employee表中的所有数据
sql = ''' select * from employee; '''
# read_sql_query的两个参数: sql语句, 数据库连接
df = pd.read_sql_query(sql, engine)
# 输出employee表的查询结果
df
 
# 新建pandas中的DataFrame, 只有id,num两列
df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']})
# 将新建的DataFrame储存为MySQL中的数据表,储存index列
df.to_sql('mydf', engine, index=True)
print('Read from and write to Mysql table successfully!')

示例的Python代码如下:

 1 # -*- coding: utf-8 -*-
 2 
 3 # 导入必要模块
 4 import pandas as pd 5 from sqlalchemy import create_engine 6 
 7 # 初始化数据库连接,使用pymysql模块
 8 db_info = {'user': 'root',
 9            'password': '123456', 10            'host': 'localhost', 11            'port': 3306, 12            'database': 'test'
13 } 14 
15 engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info, encoding='utf-8') 16 # 直接使用下一种形式也可以
17 # engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
18 
19 # 读取本地CSV文件
20 df = pd.read_csv("C:/Users/fuqia/Desktop/example.csv", sep=',') 21 print(df) 22 # 将新建的DataFrame储存为MySQL中的数据表,不储存index列(index=False)
23 # if_exists:
24 # 1.fail:如果表存在,啥也不做
25 # 2.replace:如果表存在,删了表,再建立一个新表,把数据插入
26 # 3.append:如果表存在,把数据插入,如果表不存在创建一个表!!
27 pd.io.sql.to_sql(df, 'example', con=engine, index=False, if_exists='replace') 28 # df.to_sql('example', con=engine,  if_exists='replace')这种形式也可以
29 print("Write to MySQL successfully!")

方式二:使用pymysql

image.png
# 方式二:
import pymysql
pip install PyMySQL
# 为了兼容mysqldb,只需要加入
pymysql.install_as_MySQLdb()
# 打开数据库连接
conn = pymysql.connect(host='*.*.*.*',
                       port=3306,
                       user='*',
                       passwd='*',
                       charset = 'utf8'
                       )
                
# 使用 cursor() 方法创建一个游标对象 cursor                      
cursor = conn.cursor()
 
# 使用 execute()  方法执行 SQL 查询
cursor.execute("show databases;")
cursor.execute("use database_name;")
cursor.execute("show tables;")
cursor.execute("select * from tables_name")
 
# 使用 fetchone() 方法获取单条数据;使用 fetchall() 方法获取所有数据
data = cursor.fetchall()
for item in data:
    print(item[0])
     
# 关闭数据库连接
cursor.close()

或者

import pymysql

param = {
    'host':'localhost',
    'port':3306,
    'db':'tp',
    'user':'root',
    'password':'dao0206',
    'charset':'utf8',
}
conn = pymysql.connect(**param)   #连接对象
cur = conn.cursor()   #游标对象,采用默认的数据格式

cur.execute("SELECT * FROM test")   #执行sql语句,返回受影响的行数
cur.fetchall()   #获取查询结果

# %s:占位符
# params:增加内容的列表或元组,多条语句可以使用嵌套
sql = "insert into test values(%s,%s)"
params = (1221,"小强")
cur.execute(sql, params)   #sql语句参数化,防止攻击!

# pymysql连接数据库默认开启事物,提交之前的操作,使生效!
conn.commit()

# 要及时关闭连接!
cur.close()  #关闭游标
conn.close()  #关闭连接

注意:
虽然可以使用cur.execute执行create table等语句
但建议在开发之初,就创建好数据库表结构,然后再将数据追加到表中

方式三:使用MySQLdb

# 方式三:
import MySQLdb
 
# 打开数据库连接
conn = MySQLdb.connect(host='*.*.*.*',
                       port=3306,
                       user='*',
                       passwd='*',
                       charset = 'utf8'
                       )
                        
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()
 
# 使用 execute()  方法执行 SQL 查询
cursor.execute("show databases;")
cursor.execute("use database_name;")
cursor.execute("show tables;")
cursor.execute("select * from tables_name")
 
# 使用 fetchone() 方法获取单条数据;使用 fetchall() 方法获取所有数据
data = cursor.fetchall()
for item in data:
    print(item)
 
# 关闭数据库连接
cursor.close()

方式四:使用mysql.connector

# 方式四:
import mysql.connector
 
# 打开数据库连接
db = mysql.connector.connect(host='*.*.*.*',
                             port=3306,
                             user='*',      # 数据库IP、用户名和密码
                             passwd='*',
                             charset = 'utf8')      
 
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法执行 SQL 查询
cursor.execute("show databases;")
cursor.execute("use database_name;")
cursor.execute("show tables;")
 
# 使用 fetchone() 方法获取单条数据;使用 fetchall() 方法获取所有数据
data = cursor.fetchall()
 
for item in data:
     print(item[0])
 
# 关闭数据库连接
db.close()
image.png

参考文章:
https://www.cnblogs.com/kristin/p/10718048.html
https://www.jianshu.com/p/32e63b8aa1c2
https://www.cnblogs.com/fuqia/p/8996033.html

你可能感兴趣的:(Python连接MySQL数据库的多种方式)