用linux上 用python对mysql进行连接

前提遇到的问题记录:

在linux上安装

(base) [sqoop@flink-slave5 bin]$ ./pip install mysql

Looking in indexes: http://pypi.douban.com/simple

Collecting mysql

Downloading http://pypi.doubanio.com/packages/bf/5f/b574ac9f70811df0540e403309f349a8b9fa1a25d3653824c32e52cc1f28/mysql-0.0.2.tar.gz (1.9 kB)

Collecting mysqlclient

Downloading http://pypi.doubanio.com/packages/d0/97/7326248ac8d5049968bf4ec708a5d3d4806e412a42e74160d7f266a3e03a/mysqlclient-1.4.6.tar.gz (85 kB)

|████████████████████████████████| 85 kB 4.0 MB/s

ERROR: Command errored out with exit status 1:

command: /data/python_test/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-s6ioj0n3/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-s6ioj0n3/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-s6ioj0n3/mysqlclient/pip-egg-info

cwd: /tmp/pip-install-s6ioj0n3/mysqlclient/

Complete output (12 lines):

/bin/sh: mysql_config: command not found

/bin/sh: mariadb_config: command not found

/bin/sh: mysql_config: command not found

Traceback (most recent call last):

File "", line 1, in

File "/tmp/pip-install-s6ioj0n3/mysqlclient/setup.py", line 16, in

metadata, options = get_config()

File "/tmp/pip-install-s6ioj0n3/mysqlclient/setup_posix.py", line 61, in get_config

libs = mysql_config("libs")

File "/tmp/pip-install-s6ioj0n3/mysqlclient/setup_posix.py", line 29, in mysql_config

raise EnvironmentError("%s not found" % (_mysql_config_path,))

OSError: mysql_config not found

----------------------------------------

ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

解决方法: [root@flink-slave5 ~]# yum install mysql-devel gcc gcc-devel python-devel

参考链接 https://www.jianshu.com/p/5b6deb15bd21

(base) [sqoop@flink-slave5 bin]$ pwd

/data/python_test/bin

(base) [sqoop@flink-slave5 bin]$ ./pip install mysql

Looking in indexes: http://pypi.douban.com/simple

Collecting mysql

Downloading http://pypi.doubanio.com/packages/bf/5f/b574ac9f70811df0540e403309f349a8b9fa1a25d3653824c32e52cc1f28/mysql-0.0.2.tar.gz (1.9 kB)

Collecting mysqlclient

Downloading http://pypi.doubanio.com/packages/d0/97/7326248ac8d5049968bf4ec708a5d3d4806e412a42e74160d7f266a3e03a/mysqlclient-1.4.6.tar.gz (85 kB)

|████████████████████████████████| 85 kB 14.8 MB/s

Building wheels for collected packages: mysql, mysqlclient

Building wheel for mysql (setup.py) ... done

Created wheel for mysql: filename=mysql-0.0.2-py3-none-any.whl size=1243 sha256=81bb94d982e366e617bf2dd96df9735009fea2ad983b60198d054773df25dde2

Stored in directory: /home/sqoop/.cache/pip/wheels/42/09/8b/d90224fd8b5636800fa21b9ede51f208bb1781bf7f52b89085

Building wheel for mysqlclient (setup.py) ... done

Created wheel for mysqlclient: filename=mysqlclient-1.4.6-cp37-cp37m-linux_x86_64.whl size=59120 sha256=1d83233315a664a264e51acb1b0288979b0f621da6c15a0fc3688e5f1c09fda4

Stored in directory: /home/sqoop/.cache/pip/wheels/f9/8e/98/19b6ee3ca946f2f107a41bc88a15c3844d406ceeae32446784

Successfully built mysql mysqlclient

Installing collected packages: mysqlclient, mysql

Successfully installed mysql-0.0.2 mysqlclient-1.4.6

然后执行: (base) [sqoop@flink-slave5 bin]$ ./pip install mysql-connector

...

...

...

在linux环境上测试成功

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql.py

MySQL版本: 8.0.13

(base) [sqoop@flink-slave5 majihui_test]$ pwd

/data/majihui_test

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql.py

# -*- coding: UTF-8 -*-

import mysql.connector

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

# 执行SQL语句

cursor.execute("SELECT VERSION()")

# 获取一条数据

data = cursor.fetchone()

print("MySQL版本: %s " % data)

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql.py

MySQL版本: 8.0.13

第三: 对数据表进行增删改查

1、首先我们给student的表增加一个学生用户:

mysql> select * from student ;

+-----------+--------+------+------+-------+

| Sno | Sname | Ssex | Sage | Sdept |

+-----------+--------+------+------+-------+

| 100215122 | 刘晨 | 女 | 19 | CS |

| 100215123 | 王敏 | 女 | 18 | MA |

| 200215121 | 李勇 | 女 | 20 | CS |

+-----------+--------+------+------+-------+

3 rows in set (0.00 sec)

# 插入学生代码

sql = "INSERT INTO student (Sno, Sname, Ssex,Sage,Sdept) VALUES (%s, %s, %s, %s, %s)"

val = (200215122, "马吉辉", "男", 27, CS)

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "记录插入成功。")

完整代码如下: 执行了2次,插入了2次数据

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql_insert.py

# -*- coding: UTF-8 -*-

import mysql.connector

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

# 插入学生代码

sql = "INSERT INTO student (Sno, Sname, Ssex,Sage,Sdept) VALUES (%s, %s, %s, %s, %s)"

val = (200215123, "王金灿", "男", 30, "CS")

# 执行SQL语句

cursor.execute(sql, val)

# 提交sql语句对事务进行提交

db.commit()

# 打印结果

# 使用cursor.rowcount,返回查询结果集中的行数。如果没有查询到数据或者还没有查询,则结果为 -1,否则会返回查询得到的数据行数;

print(cursor.rowcount, "记录插入成功。")

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_insert.py

1 记录插入成功。

mysql> select * from student ;

+-----------+-----------+------+------+-------+

| Sno | Sname | Ssex | Sage | Sdept |

+-----------+-----------+------+------+-------+

| 100215122 | 刘晨 | 女 | 19 | CS |

| 100215123 | 王敏 | 女 | 18 | MA |

| 200215121 | 李勇 | 女 | 20 | CS |

| 200215122 | 马吉辉 | 男 | 27 | CS |

| 200215123 | 王金灿 | 男 | 30 | CS |

+-----------+-----------+------+------+-------+

5 rows in set (0.00 sec)

代码解释:

我们使用 cursor.execute 来执行相应的 SQL 语句,

val 为 SQL 语句中的参数,SQL 执行后使用 db.commit() 进行提交。

需要说明的是,我们在使用 SQL 语句的时候,可以向 SQL 语句传递参数,

这时 SQL 语句里要统一用(%s)进行占位,否则就会报错。

不论插入的数值为整数类型,还是浮点类型,都需要统一用(%s)进行占位。

另外在用游标进行 SQL 操作之后,还需要使用 db.commit() 进行提交,否则数据不会被插入。

小结:

上面这段代码中有两个重要的对象你需要了解下,分别是 Connection 和 Cursor。

Connection 就是对数据库的当前连接进行管理,我们可以通过它来进行以下操作:

1、通过指定 host、user、passwd 和 port 等参数来创建数据库连接,这些参数分别对应着数据库 IP 地址、用户名、密码和端口号;

2、使用 db.close() 关闭数据库连接;

3、使用 db.cursor() 创建游标,操作数据库中的数据;

4、使用 db.begin() 开启事务;

5、使用 db.commit() 和 db.rollback(),对事务进行提交以及回滚。

当我们通过cursor = db.cursor()创建游标后,就可以通过面向过程的编程方式对数据库中的数据进行操作:

1、使用cursor.execute(query_sql),执行数据库查询;

2、使用cursor.fetchone(),读取数据集中的一条数据;

3、使用cursor.fetchall(),取出数据集中的所有行,返回一个元组 tuples 类型;

4、使用cursor.fetchmany(n),取出数据集中的多条数据,同样返回一个元组 tuples;

5、使用cursor.rowcount,返回查询结果集中的行数。如果没有查询到数据或者还没有查询,则结果为 -1,否则会返回查询得到的数据行数;

6、使用cursor.close(),关闭游标。

2、# 查询年龄大于20的

sql = 'SELECT * FROM student WHERE Sage>=20'

cursor.execute(sql)

data = cursor.fetchall()

for each_player in data:

print(each_player)

完整代码如下:

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_select.py

('200215121', '李勇', '女', 20, 'CS')

('200215122', '马吉辉', '男', 27, 'CS')

('200215123', '王金灿', '男', 30, 'CS')

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql_select.py

# -*- coding: UTF-8 -*-

import mysql.connector

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

# 查询年龄大于20的

sql = 'SELECT * FROM student WHERE Sage>=20'

cursor.execute(sql)

data = cursor.fetchall()

for each_student in data:

print(each_student)

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_select.py

('200215121', '李勇', '女', 20, 'CS')

('200215122', '马吉辉', '男', 27, 'CS')

('200215123', '王金灿', '男', 30, 'CS')

----

3、如何修改数据呢?

# 修改马吉辉的CS 修改成SS

sql = 'UPDATE student SET Sdept = %s WHERE Sname = %s'

val = ("SS", "马吉辉")

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "记录被修改。")

完整代码如下:

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql_update.py

# -*- coding: UTF-8 -*-

import mysql.connector

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

sql = 'UPDATE student SET Sdept = %s WHERE Sname = %s'

val = ("SS", "马吉辉")

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "记录被修改。")

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_update.py

1 记录被修改。

mysql> select * from student where Sname = "马吉辉";

+-----------+-----------+------+------+-------+

| Sno | Sname | Ssex | Sage | Sdept |

+-----------+-----------+------+------+-------+

| 200215122 | 马吉辉 | 男 | 27 | SS |

+-----------+-----------+------+------+-------+

1 row in set (0.00 sec)

---------

4、最后我们看下如何删除王金灿这个同学的数据:

# 删除王金灿这个同学的数据

sql = 'DELETE FROM student WHERE Sname = %s'

val = ("王金灿",)

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "记录删除成功。")

完整代码如下:

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql_delete.py

# -*- coding: UTF-8 -*-

import mysql.connector

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

# 删除王金灿这个同学的数据

sql = 'DELETE FROM student WHERE Sname = %s'

val = ("王金灿",)

cursor.execute(sql, val)

db.commit()

print(cursor.rowcount, "记录删除成功。")

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_delete.py

1 记录删除成功。

mysql> select * from student ;

+-----------+-----------+------+------+-------+

| Sno | Sname | Ssex | Sage | Sdept |

+-----------+-----------+------+------+-------+

| 100215122 | 刘晨 | 女 | 19 | CS |

| 100215123 | 王敏 | 女 | 18 | MA |

| 200215121 | 李勇 | 女 | 20 | CS |

| 200215122 | 马吉辉 | 男 | 27 | SS |

+-----------+-----------+------+------+-------+

4 rows in set (0.00 sec)

第四:

针对上面的操作过程,你可以模拟下数据的 CRUD 操作,但有几点你需要注意。

1. 打开数据库连接以后,如果不再使用,则需要关闭数据库连接,以免造成资源浪费。

2. 在对数据进行增加、删除和修改的时候,可能会出现异常,这时就需要用try...except捕获异常信息。

3、比如针对插入同学王金灿这个操作,你可以写成下面这样:

第五:

加入python异常完整代码如下:

(base) [sqoop@flink-slave5 majihui_test]$ cat python_connect_mysql_insert_traceback.py

# -*- coding: UTF-8 -*-

import mysql.connector

import traceback

# 打开数据库连接

db = mysql.connector.connect(

host="10.9.36.253",

user="rpt",

passwd="Rpt1234!", # 写上你的数据库密码

database='rpt',

auth_plugin='mysql_native_password'

)

# 获取操作游标

cursor = db.cursor()

# 插入学生代码

try:

sql = "INSERT INTO student (Sno, Sname, Ssex,Sage,Sdept) VALUES (%s, %s, %s, %s, %s)"

val = (200215123, "王金灿", "男", 30, "CS")

# 执行SQL语句

cursor.execute(sql, val)

# 提交sql语句对事务进行提交

db.commit()

# 打印结果

# 使用cursor.rowcount,返回查询结果集中的行数。如果没有查询到数据或者还没有查询,则结果为 -1,否则会返回查询得到的数据行数;

print(cursor.rowcount, "记录插入成功。")

except Exception as e:

# 打印异常信息

traceback.print_exc()

# 回滚

db.rollback()

finally:

# 关闭游标&数据库连接

cursor.close()

db.close()

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_insert_traceback.py

1 记录插入成功。

mysql> select * from student ;

+-----------+-----------+------+------+-------+

| Sno | Sname | Ssex | Sage | Sdept |

+-----------+-----------+------+------+-------+

| 100215122 | 刘晨 | 女 | 19 | CS |

| 100215123 | 王敏 | 女 | 18 | MA |

| 200215121 | 李勇 | 女 | 20 | CS |

| 200215122 | 马吉辉 | 男 | 27 | SS |

| 200215123 | 王金灿 | 男 | 30 | CS |

+-----------+-----------+------+------+-------+

5 rows in set (0.00 sec)

再执行一次,就会报错:

(base) [sqoop@flink-slave5 majihui_test]$ /data/python_test/bin/python python_connect_mysql_insert_traceback.py

Traceback (most recent call last):

File "python_connect_mysql_insert_traceback.py", line 20, in

cursor.execute(sql, val)

File "/data/python_test/lib/python3.7/site-packages/mysql/connector/cursor.py", line 551, in execute

self._handle_result(self._connection.cmd_query(stmt))

File "/data/python_test/lib/python3.7/site-packages/mysql/connector/connection.py", line 490, in cmd_query

result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))

File "/data/python_test/lib/python3.7/site-packages/mysql/connector/connection.py", line 395, in _handle_result

raise errors.get_exception(packet)

mysql.connector.errors.IntegrityError: 1062 (23000): Duplicate entry '200215123' for key 'PRIMARY'

第八:

我们在python代码中写了 mysql的账号和密码如何 # 建议吧数据库链接信息写到配置文件里,防止密码泄露。

import json

import traceback

import mysql.connector

# 读取数据库链接配置文件

with open('mysql.json', encoding='utf-8') as con_json:

con_dict = json.load(con_json)

# 打开数据库链接

db = mysql.connector.connect(

host=con_dict['host'],

user=con_dict['user'],

passwd=con_dict['passwd'],

database=con_dict['database'],

auth_plugin=con_dict['auth_plugin'],

)

# 获取操作游标

cursor = db.cursor()

try:

sql = 'SELECT id, name, hp_max FROM heros WHERE hp_max>6000'

cursor.execute(sql)

data = cursor.fetchall()

print(cursor.rowcount, '查询成功。')

for each_hero in data:

print(each_hero)

except Exception as e:

# 打印异常信息

traceback.print_exc()

finally:

cursor.close()

db.close()

# 建议吧数据库链接信息写到配置文件里,防止密码泄露。

mysql8连接5sslexecptio_python 链接mysql数据库使用 mysql-connector 方式相关推荐

  1. php连接mysql_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  2. php连接虚拟机中mysql数据库吗,PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MysqL数据库的三种方式(MysqL.MysqLi.pdo),结合实例形式分析了PHP基于MysqL.MysqLi.pdo三种方式连接MysqL数据库的相关操作技巧与 ...

  3. php 复制mysql数据库_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  4. .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  5. 连接MySQL数据库的两种方式

    连接MySQL数据库的两种方式 一.通过sqlyog连接 二.通过命令行连接数据库: 命令行连接! 1.mysql -u root -p123456 #连接数据库2.update mysql.user ...

  6. mysql 5.7.11 安装教程,MySQL数据库之mysql 5.7.11 安装配置教程

    本文主要向大家介绍了MySQL数据库之mysql 5.7.11 安装配置教程 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 六步轻松搞定mysql5.7.11的安装 1.下载安 ...

  7. MySQL数据库卸载+MySQL常用的图形化管理工具介绍

    MySQL数据库卸载 我们为什么需要卸载MySQL呢?可能是因为安装的时候安装出错,也可能是因为版本过低,导致一些问题没办法进行解决,所以需要卸载MySQL,重新安装最新版的MySQL. 第一步:停止 ...

  8. mysql数据库,mysql数据库监控介绍

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...

  9. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表

    完全卸载MySQL 数据库--清空MySql注册表 完全卸载Mysql的步骤主要有以下4步: 1. 通过控制面板- 卸载程序--mysql 将其卸载掉. 2. 删除Mysql 安装文件目录下的Mysq ...

最新文章

  1. justify-content与align-items解析
  2. 20220129CTF刷题-- WEB方向
  3. linux centos 分区,linux centos 分区
  4. 7种常见的数据分析基本思路,满足你职场95%的需求
  5. 4-7:TCP协议之流量控制
  6. 线性地址到物理地址的映射
  7. 括号配对问题----栈模拟
  8. 信号量 Linux函数 semget();semctl();semop();
  9. 【图神经网络入门】GAT图注意力网络
  10. linux中如何只拷贝文件夹下的文件,而不包括其子文件夹
  11. ZIP压缩输入/输出流
  12. oracle执行计划结果分析_优化体系--sql整体优化(调优工具分析)
  13. X明X源面试题《三》
  14. 【WPF】非UI线程操作UI
  15. 颜色对照表(三)(16进制、RGB、CMYK、HSV、中英文名)
  16. Python_day01-----day07
  17. LightOJ-1253 Misere Nim
  18. 企业智能化转型meetup回顾|开源BI AI助力企业转型之旅三阶段
  19. 水深6到9米有鱼吗_我国四大家鱼之一,营养价值高,为何很少有人养殖?|青鱼|养殖|草鱼|罗非鱼|淡水鱼|黑鱼...
  20. 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具

热门文章

  1. 命令开启 停止mysql服务_windows 下命令行启动停止mysql
  2. linux下root无权限问题,解决Ubuntu中sudoers崩溃而无root权限的问题
  3. 基于安卓Android的健身app系统
  4. 电脑软件(例如 Adobe、Autodesk)为什么那么容易被破解?
  5. 201709猫眼测试开发校招面经
  6. vue实现侧边定位栏
  7. 站长必须知道的seo知识!
  8. layui隐藏侧边栏_layui禁用侧边导航栏点击事件的处理方法
  9. linux分析mirna,从高通量测序的数据中分析novel miRNA
  10. 商品管理-运营指挥室 看板