当前位置: 首页 > news >正文

Python操作MySQL数据库

今天分享一下Python操作MySQL数据库相关的知识点。


安装必需品


  • 我这里安装的是 Python2.7
  • MySQL5.6版本
  • 数据库连接MySQL-python-1.2.3.win-amd64-py2.7

这个版本的我在Sourceforge上面找了很久才找到,一定要注意是安装的32位还是64位.链接如下: 终极链接层

测试一下

打开命令行,若出现如下:

Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:40:30) [MSC v.1500 64 bit (
AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

就说明安装好了。

如果是采取zip文件安装的话,需要cd到相关的目录,使用python setup.py install。来进行安装,当然也可以借助pip这款神器咯。

数据库准备

在MySQL中创建我们待会要进行测试的数据库。

Server version: 5.6.24-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hibernate          |
| mybatis            |
| mysql              |
| performance_schema |
| practice           |
| sakila             |
| test               |
| world              |
+--------------------+

mysql> create database python;
Query OK, 1 row affected (0.03 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hibernate          |
| mybatis            |
| mysql              |
| performance_schema |
| practice           |
| python             |
| sakila             |
| test               |
| world              |
+--------------------+

mysql> use python
Database changed

Python 代码测试

下面就借助一个简单的小例子来进行演示咯。

#coding:UTF-8

import MySQLdb

conn = MySQLdb.connect(
    host='localhost',
    port = 3306, # 切记这里是整数,而不是字符串!!!
    user = 'root',
    passwd = 'mysql',
    db = 'python',
)

curs = conn.cursor()
 # 创建一张数据库中的表
curs.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

 # 插入一条数据的记录
# curs.execute("insert into student values('2','Mark','Class 3','20')")

 # 修改查询条件的数据 (这条语句不知道为什么,我的控制台执行的时候出错了。欢迎批评指正)
# curs.execute("update student set class='Class 14' where name ='Mark'")

 # 删除查询条件的数据
# curs.execute("delete from student where age ='20'")

curs.close()
conn.commit()
conn.close()

下面分别来讲一讲每一个命令的具体的功能

// 创建一张名为student的表结构
 curs.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

// 查看数据库可见,那个db_test表是本人之前自己创建的

mysql> show tables;
+------------------+
| Tables_in_python |
+------------------+
| db_test          |
+------------------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_python |
+------------------+
| db_test          |
| student          |
+------------------+
2 rows in set (0.00 sec)

mysql>
curs.execute("insert into student values('2','Mark','Class 3','20')")


// 查看数据库结果
mysql> select * from student;
+------+------+---------+------+
| id   | name | class   | age  |
+------+------+---------+------+
|    2 | Mark | Class 3 | 20   |
+------+------+---------+------+
1 row in set (0.00 sec)
·
·
·
·
·
·

进阶版

使用纯的SQL语句进行操作,很是麻烦。类似于Java的PreparedStatement的方式,Python也有类似于占位符的形式来操作数据库。如下:

#coding=utf-8
import MySQLdb

conn= MySQLdb.connect(
        host='localhost',
        port = 3306,
        user='root',
        passwd='123456',
        db ='test',
        )
cur = conn.cursor()

#插入一条数据
sqli="insert into student values(%s,%s,%s,%s)"
cur.execute(sqli,('3','Huhu','2 year 1 class','7'))

#一次插入多条记录
sqli="insert into student values(%s,%s,%s,%s)"
cur.executemany(sqli,[
    ('3','Tom','1 year 1 class','6'),
    ('3','Jack','2 year 1 class','7'),
    ('3','Yaheng','2 year 2 class','7'),
    ])

# 获取表中的数据
cur.execute("select * from student")
cur.fetchone()

# fetchone()方法可以帮助我们获得表中的数据,可是每次执行cur.fetchone() 获得的数据都不一样,换句话说我没执行一次,游标会从表中的第一条数据移动到下一条数据的位置,所以,我再次执行的时候得到的是第二条数据。
# scroll(0,'absolute') 方法可以将游标定位到表中的第一条数据。



#获得表中有多少条数据
aa=cur.execute("select * from student")
print aa

#打印表中的多少数据
info = cur.fetchmany(aa)
for ii in info:
    print ii

cur.close()
conn.commit()
conn.close()

相关文章:

  • Java中的内部接口
  • linux gcc 编译动态类库(.so)和静态类库(.a)
  • jQuery学习和知识点总结归纳
  • 如何判断链表是否是回文
  • igraph安装(R/Python)
  • 【学习笔记】屏幕尺寸的信息
  • 在Mac OS X上安装 Ruby运行环境
  • [译]CSS 居中(Center)方法大合集
  • java httpclient使用socks5代理(二)使用socks5代理服务
  • C#:为详情查看界面设计的万用TextBox自定义控件
  • JS --事件
  • Sublime Text 3 关闭自动提示
  • 用verilog模拟DDS产生正弦波信号
  • 第k个元素(模板)
  • 景德镇特色的部门级别与权限
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • HTML5新特性总结
  • javascript数组去重/查找/插入/删除
  • Java到底能干嘛?
  • webgl (原生)基础入门指南【一】
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 理解在java “”i=i++;”所发生的事情
  • 三栏布局总结
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 自定义函数
  • 阿里云重庆大学大数据训练营落地分享
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 我们雇佣了一只大猴子...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​渐进式Web应用PWA的未来
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Java NIO(一)FileChannel
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #pragam once 和 #ifndef 预编译头
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (poj1.2.1)1970(筛选法模拟)
  • (二)斐波那契Fabonacci函数
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (力扣题库)跳跃游戏II(c++)
  • (六)激光线扫描-三维重建
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十一)图像的罗伯特梯度锐化
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core使用ef 6
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net 知识杂记
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET连接数据库方式
  • /etc/fstab和/etc/mtab的区别