python操作mysql数据库

问题:DDL,DCL,DML的区别?

语言与框架:jdbc/odbc操作数据库

java(ibatis/hibernate/jpa)操作数据库

客户端工具:navicat for mysql

步骤:

1.连接上mysql

命令:mysql -u用户名 -p密码 -P端口 -hip地址 数据库名称

举例:mysql -uroot -proot -P3306 -h127.0.0.1 mysql

2.创建数据名称

命令:create database 数据库名称

举例:create database mydb

3.切换数据库

命令:use 数据库名称

举例:use mydb

4.创建表

命令:create table 表名(字段1名称 类型和长度 修饰符 是否可以为空,

字段2名称 类型和长度 修饰符 是否可以为空)

举例:create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null)

5.插入表

命令:insert into 表名 values(字段1,字段2,字段N)

举例:insert into userInfo values(1,'张三',20,'男','','北京');

insert into userInfo values(2,'李四',21,'女','上海');

6.查询表

命令:select *或者列名 from 表名 where 列名1=xxx and/or 列名2=xxx

举例:select * from userInfo;

7.Python操作mysql数据库

ipython+mysqlDBData.dll

python+MySQLdb,比如oracle(CX_oracle)

1)一般理论上操作流程

begin---建立连接(connection)-》操作数据(增/删/改查)-》获取结果

-》关闭连接---end

2)实际操作流程

begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》

-》提交事务-》关闭游标-》关闭连接---end

3)前提准备,需要安装MySQLDB

4)练习:使用python向userInfo表中插入一行数据

数据库数据预制脚本

mysql -uroot -proot -P3306 -h127.0.0.1 mysql

create database mydb;

use mydb;

create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null);

insert into userInfo values(1,'张三',20,'男','北京');

代码示例:

import MySQLdb

#begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》

#    -》提交事务-》关闭游标-》关闭连接---end

#插入并查询所有结果

def select():

    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")

    curson = conn.cursor()

    result =  curson.execute("select * from userInfo")

    print "result: ",result

    curson.close()

    conn.close()

if __name__ == '__main__':

    select()

8.python与mysql能解决什么问题?

1) 功能测试-----模拟业务数据

2)自动化测试----自动化用例的数据预制

3)性能测试----大量数据(<百万级),如果千万级数据推荐使用load

4)其他---测试桩开发、程序数据开发

9.插入和查询

插入:支持两种方式

1)单条插入  execute("insert into userInfo values(5,'测试人员2',25,'女','北京')"),也可以使用模板插入,例如:

cursor.execute("insert into userInfo values(%s,%s,%s,%s,%s)",(7,'测试人员4',27,'女','北京'))

2) 多条插入,需要使用占位符模板,通过元组列表来实现,例如:

模板语句:insertSql2 = insert into userInfo values(%s,%s,%s,%s,%s)

举例:executemany(insertSql2,元组列表),例如: executemany(insertSql2,[(8,'测试人员5',28,'女','北京'),(9,'测试人员6',29,'女','北京'),(10,'测试人员7',30,'女','北京')])

查询:查询当前游标指定的一行,查询所有行,查询当前游标以下多少行

1)查询当前游标的一行,cursor.fetchone()

2) 查询所有行,基于当前游标来说 ,cursor.fetchall()

3)查询当前游标以下的行数,cursor.fetchman(3) #比如3行

返回值是一个元组,多个是一个元组内包含元组,

游标是从0开始,数据取完后,游标的值等于数据总行,后面获取的值为None

10.修改和删除

删除:delete from userInfo where id = 10

修改:单条,多条修改

1)单条:通过普通的sql语句进行修改,例如execute("update userInfo set userAge=100  where id = 1")

通过占位符的方式进行传值:execute("update userInfo set userAge=%s  where id = %s",(100,2))

2)多条:通过占位符,一次性操作多条:

executemany("update userInfo set userAge=%s  where id = %s",[(100,3),(100,4),(100,5)])

11.事物性

def testTransaction():

    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")

    cursor = conn.cursor()

    try:

        sql1 = "insert into userInfo values(11,'测试人员8',31,'女','北京')"

        sql2 = "insert into userInfo values(10,'测试人员9',32,'女','北京')"

        result1 =  cursor.execute(sql1)

        result2 =  cursor.execute(sql2)

    except Exception,e:

        print str(e)

        conn.rollback()

    conn.commit()

    cursor.close()

    conn.close()

mysql事务自动提交的问题:

1.在mysql的系统配置文件my.ini文件中的[mysqld]下面加入autocommit =0

2.重启mysql服务,登录后事务的状态为off,通过show variables like '%commit%';查询如下:

autocommit | OFF

3.如果事务还是没有生效,可能是表创建时所用的存储引擎出现问题,引擎如下:

MyISAM效率更高,但不支持事务,不支持外键。----如果事务一开始被关闭,创建的表的引擎是这个,,不支持

自动提交事务

InnoDB效率略低,支持事务和外键。-----可以支持提交事务,需要把表的引擎修改过来,如下

4.修改表的存储引擎

show create table userInfo; 查看当前表所在的引擎:ENGINE=MyISAM DEFAULT CHARSET=utf8

ALTER TABLE userInfo ENGINE=InnoDB  修改当前表的引擎

# encoding=utf-8
import MySQLdb #begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》
# -》关闭游标-》关闭连接---end def getConn_cursor():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
return conn,cursor;
#插入并查询所有结果
def insert():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
#例如:insert into userInfo values(1,'张三',20,'男','北京');
#单条插入
insertSql="insert into userInfo values(5,'测试人员2',25,'女','北京')"
insertSql2="insert into userInfo values(%s,%s,%s,%s,%s)"
# insertResult2 = cursor.execute(insertSql2,(7,'测试人员4',27,'女','北京'))
#多条插入
insertResult2 = cursor.executemany(insertSql2,[(8,'测试人员5',28,'女','北京'),(9,'测试人员6',29,'女','北京'),(10,'测试人员7',30,'女','北京')])
print insertResult2
conn.commit()
cursor.close()
conn.close()
def select():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("select * from userInfo")
print "rownumber1",cursor.rownumber
print cursor.fetchone()
print "rownumber2",cursor.rownumber
print cursor.fetchone()
print "rownumber3",cursor.rownumber
print cursor.fetchmany(2)
print "rownumber4",cursor.rownumber
print cursor.fetchall()
print "rownumber5",cursor.rownumber
print cursor.fetchone()
print "rownumber6",cursor.rownumber
print "result: ",result
print cursor.fetchone()
print "rownumber7",cursor.rownumber
print "result: ",result cursor.close()
conn.close()
def delete():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("delete from userInfo where id = 8")
print "result: ",result
conn.commit()
cursor.close()
conn.close()
#修改
def update():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("update userInfo set userAge=100 where id = 1")
sql = "update userInfo set userAge=%s where id = %s"
result = cursor.execute(sql,(101,2))
print "result: ",result
results = cursor.executemany(sql,[(100,3),(100,4),(100,5)])
print "results: ",results
conn.commit()
cursor.close()
conn.close() def testTransaction():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
try:
sql1 = "insert into userInfo values(13,'测试人员8',31,'女','北京')"
sql2 = "insert into userInfo values(10,'测试人员9',32,'女','北京')"
result1 = cursor.execute(sql1)
result2 = cursor.execute(sql2)
except Exception,e:
print str(e)
conn.rollback()
conn.commit()
cursor.close()
conn.close() if __name__ == '__main__':
# insert()
#select()
# delete()
# select()
testTransaction()

python-对于mysql数据库的操作的更多相关文章

  1. python中mysql数据库的操作-sqlalchemy

    MySQLdb支持python2.*,不支持3.* ,python3里面使用PyMySQL模块代替 python3里面如果有报错  django.core.exceptions.ImproperlyC ...

  2. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  3. 使用python读取mysql数据库并进行数据的操作

    (一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...

  4. python专题-Mysql数据库(python3._+ PyMysql)

    之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 Python2 ---> Python3 MySQLdb ...

  5. python专题-Mysql数据库(python2._+ Mysqldb)

    Python使用MySQL数据库 MySQLdb驱动从2014年1月停止了维护. Python2 MySQLdb 一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安 ...

  6. Python使用MySQL数据库(新)

    之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 然而,2016年开始,我从Python2切换到了Python3 ...

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

    上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...

  8. python对mysql进行简单操作

    python 连接MySQL数据库,进行简单操作 一.连接MySQL数据库,关闭连接 import pymysql db = pymysql.connect(host="xxx.xxx.x. ...

  9. Python使用MySQL数据库【转】

    转自 Python使用MySQL数据库(新)[很详细][fetchall和fetchmany有啥区别呢?] - CSDN博客https://blog.csdn.net/u011350541/artic ...

  10. Python在mysql中进行操作是十分容易和简洁的

    首先声明一下,我用的是Windows系统! 1.在Python中对mysql数据库进行操作首先要导入pymysql模块,默认情况下,Python中是没有安装这个模块的, 可以在Windows的命令行中 ...

随机推荐

  1. cin读取不知行列数的矩阵以及带逗号的整型数据

    摘要:如果输入中给出了一个矩阵的具体的行列数,那很好办,循环读取就行了,如果没有给你具体的行列数,而且输入中的整型数据之间还有逗号,那应该怎么来读取呢?下面给出具体代码: 一.输入没有给出矩阵的具体行 ...

  2. 沉淀再出发:java中的CAS和ABA问题整理

    沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切 ...

  3. kafka概要设计

    Kafka核心功能 即:高性能的消息发送与高性能的消息消费 下载安装包后即可启动Kafka服务器,但是此前需要首先启动Zookeeper服务器,Zookeeper是为Kafka提供协调服务的工具,Ka ...

  4. JavaScript --- Set 集合结构详解

    Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. 1 const set1 = new Set([1, 2, 3, 4, 5]); 2 3 console.log(set1.has ...

  5. Angular4 @HostBinding @HostListener

    host属性 @Component({ selector: 'jhi-project', templateUrl: './project.html', styleUrls: [], host: { ' ...

  6. 4、Android-数据存储方案(使用LitePal操作数据库)

    4.5.使用LitePal操作数据库 4.5.1.LitePal简介 LitePal是一款开源的Android数据库框架 采用了关系映射(ORM)的模式 将经常使用的一些数据库做了封装 是得不用编写S ...

  7. Spring(十一)之AOP

    Spring 框架的一个关键组件是面向方面的编程(AOP)框架.面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点.跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于 ...

  8. mysql服务器参数

    mysql服务器参数: 配置是从上往下读取,同一个参数项,后边的配置项会覆盖前边的配置项 mysql获取配置信息路径: 命令行参数    mysqld_safe  --datadir=/data/sq ...

  9. [BJWC2018]最长上升子序列

    十分感谢GXZ大佬的讲解,此处致以敬意!emmmm在初学状压DP时就理解了如此精妙的一道题,感到很开森~ \(Address\) ________________ #\(\color{red}{\ma ...

  10. VPP(Vector Packet Processing)配置工具

    前言 VPP提供了一个配置工具,让用户可以简单快捷地配置VPP.用户可以通过一些简单的命令配置VPP,功能包括安装及一些基本配置和测试用例. 使用 先安装一个python的pip模块,使用pip安装V ...