python连接mysql的几种方式_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
python连接mysql的几种方式_Python连接MySQL数据库的多种方式相关推荐
- python连接sql引用的第三方库_python连接sqlserver数据库操作
简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...
- MySQL的7种JOIN表连接结果集,你了解几个?搞懂仅需1张图
目录 实践 第一种 第二种 第三种 第四种 第五种 第六种 第七种 大家好呀!我是爷爷的茶七里香,周末啦~开森~,今天突然想起曾经面试遇到的MySQL题目,记录下来方便查阅!!! MySQL的7种表 ...
- python不支持以下哪种数据类型_Python 不支持以下哪种数据类型?
Python 不支持以下哪种数据类型? 答:char 中国大学MOOC: 为了充分利用学习时间,下列方法可行的是: 答:尽量选择理想的固定场所学习\n充分利用等候和其它碎片时间\n把握一天中的最佳状态 ...
- python的for语句有几种写法_Python if 和 for 的多种写法
原博文 2016-12-09 16:37 − a, b, c = 1, 2, 3 [对比Cpp里:c = a >b? a:b]这个写法,Python只能常规的空行,缩进吗? 人生苦短,我用pyt ...
- 计算机打开网络连接,win7电脑三种打开网络连接上网的方法
使用电脑上网,免不了常常发生电脑连不上网络的故障.出现这种情况,就需要到电脑的"网络连接"查看网络的参数状况,下面就由学习啦小编跟大家分享win7电脑三种打开网络连接上网的方法吧, ...
- python操作数据库的几种方法_python对mysql数据库操作的三种不同方式
原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...
- python传入参数的几种方法_python传递参数方式小结
本文实例总结了python传递参数方式.分享给大家供大家参考.具体分析如下: 当形参如*arg时表示传入数组,当形参如**args时表示传入字典. 输出: python中定义一个函数,可以通过正常的只 ...
- python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...
- python函数定义和其四种参数_python入门第九课:函数的定义及多种参数传递方式...
本教程使用的课本是<Python编程:从入门到实践>,作者:[美] Eric Matthes 本节介绍Python中的函数,函数是可以反复使用的一段代码,有了函数能大大简化编程工作量,还能 ...
最新文章
- 零基础入门CV赛事,理论结合实践
- string substring的用法_夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战...
- wdcp系统升级mysql5.7.11
- python可以实现什么黑科技_Python黑科技之元类
- 虚拟路由器冗余协议-VRRP
- 【LeetCode】【HOT】102. 二叉树的层序遍历(队列)
- Q93:PLY文件对应图形法向量反向问题——以bunny10K为例
- LVDT位移传感器的构成原理及特点
- 《三国演义》分章节梗概
- iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
- 微信运动服务器忙,很哥解密:微信运动有玄机,有人悄悄惦记你
- 《这个历史挺靠谱·上·袁腾飞讲中国史》读后感
- Vue 点击获得父元素,子元素,兄弟元素(DOM操作)
- 内置函数sum与sum(list,[])
- php面试题之PHP核心技术(life)
- FairyGUI-GComponent组件
- 淘宝 Android 端图片体验优化实践
- 单元话题写作-Unit 1 英语学习
- 续集关于上次简单微信小程序制作 (快递100查询)
- Java多线程同步和通信