环境:windows8+Python2.7+MySQL5.6



尝试过在C/C++中嵌入SQL语言,最终在其复杂“繁琐”环境配置中败下阵来,后来发现Python和MySQL比較easy实现,在Python中能够导入MySQLdb包。调用已经封装好的API接口,就能在Python中嵌入SQL语句。实现对数据库的操作;

Python调用MySQLdb库函数,首先建立和MySQL数据库连接connection。定义一个游标cursor。就能向DBMS传输一条条SQL语句,交给DBMS运行。随后通过API将检索结果返回。由cursor指针指向;在Python中。仅仅须要通过cursor这个指针调用fetchall或者fetchone方法对检索结果结合进行訪问;除了检索,cursor还能够完毕非常多操作。比如:新建(视图,表,数据库等)。增删改,訪问数据字典(描写叙述表格模式。显示数据库,表格等);之后提交MySQL或者rollback,提交数据或者撤销对数据库的操作;



MySQL除了繁琐的命令行操作界面外,如今有非常多的人性化的可视化界面操作。我使用的是navicat



1.导入MySQLdb包

在控制台中键入 import MySQLdb,假设没有错误提示,则说明能够成功导入MySQLdb





2.连接和断开数据库

conn = MySQLdb.connect(#建立一个连接。命名为conn
host ='localhost',#主机
user ='root',#本地用户
passwd ='',#password
db ='mysql_test_db',#连接数据库名
)
conn.close()

3.定义游标cursor以及关闭游标

cur = conn.cursor()
cur.close()

注:当然游标能够定义多个



4.游标经常用法。以检索为例:

sql = "select * from students"
cur.execute(sql)
print cur.fetchall()

sql中存放的符合MySQL语法规则的SQL语句,cur调用execut方法。将SQL语句传给DBMS运行,返回值用cur指向;

fetchall()方法获取全部行。fetchone()方法获取一行,fetchmany(int i)方法获取多行(i行);

详细返回多少行能够由count = cur.execute(sql)来记录。

打印结果:



发现打印似乎有问题,解决方法在后面给出。



5.简单的SQL命令罗列:

建库:create database database_name;

建表:create table table_name(

      属性名 数据类型[其它描写叙述],

      ...);

删库:drop database database_name;

删表: drop table table_name;

查询表格模式:describe table_name;

插入:insert into table_name(column_name,...) values(...);

查询:select *|column_name,... from table_name where condition;

更新:update table_name set column_name=... where condition;

删除:delete from table_name where condition;

改动:alter table table_name [add|modify|drop unique];

除了以上操作外还有:

show databases;

use database_name;

close database_name;

show tables;

describe table_name;

注意:delete from table_name仅仅是删除了表中的数据,表格的模式还在。



6.事务提交

为了保证数据库操作的原子性(若干的SQL操作组成一个事务,比方类转账操作,必须一个账户减额,另外一个账户增额,这样才干正常运营下去;又比方同一时候间同出发终止地点同辆火车会不会买到同样的座位问题)并发性控制,所以在每一个事务操作完毕后。对其进行错误检測,是否应该提交还是撤销操作。

分别为conn.commit()和conn.rollback();



7.错误检測:

待深入。能够使用错误捕获机制try...except...;。



8.可能使用到字符串传參问题:

sql="select aid,sum(dollars) from orders where cid=%s group byaid"
cur.execute(sql,[agent])

比方须要依据输入的agent值,构成完整的SQL语句,当然还能够是多个參数:

cur.execute(sql,[s1,s2,...])



9.输出编码问题:

print cur.fetchall()

或者

print cur.fetchone()

这样获得的所有记录或者是一条记录,相当于元组,这样直接打印。输出的是MySQL的字符编码,上面样例显示的utf8编码,那怎么才干显示正常呢?

逐一打印当中的每个分量:

贴上打印函数:

def connect_width(text, width):
stext =text
iftype(text)==int or type(text)==long:#假设是数字型须要转为字符型
stext = str(text)
return"%-*s"%(width,stext) def Print_MySqldb_Result(cur):
str_result="| "
row1=""
array_lenth=[]
iflen(cur.fetchall())==0:
print "cur is null,check your sql select"
else:
for field_desc in cur.description:
if len(field_desc[0])>field_desc[2]:
array_lenth.append(len(field_desc[0]))
else:
array_lenth.append(field_desc[2])
text=connect_width(field_desc[0],field_desc[2])
str_result=str_result+text+" |"
lenth=len(str_result)
for i in range(lenth):
if i==0:
row1=row1+"+"
else:
if i==lenth-1:
row1=row1+"+"
else:
row1=row1+"-"
print row1
print str_result
print row1
for i in cur:
row2="| "
k=0
for j in i:
text=connect_width(j,array_lenth[k])
row2=row2+text+" |"
k=k+1
print row2
print row1

格式化打印效果:



假设显示中文有问题。或者格式化输出中英文结合有问题。能够继续去查找对应的方法解决。

主要是解决中文字宽的问题,这里不给出;



10.Python编码和MySQL编码问题:

show variables like 'char%'

显示结果:



默认的编码为Latin1。这样须要去MySQL的根文件夹改动my.ini文件里改动:

default-character-set=utf8

init_connect='SET NAMES utf8'

加入上这两行。就可以



附上完整地Python代码

importMySQLdb
def connect_width(text, width):
stext =text
iftype(text)==int or type(text)==long:#假设是数字型须要转为字符型
stext = str(text)
return"%-*s"%(width,stext) def Print_MySqldb_Result(cur):
str_result="| "
row1=""
array_lenth=[]
iflen(cur.fetchall())==0:
print "cur is null,check your sql select"
else:
for field_desc in cur.description:
if len(field_desc[0])>field_desc[2]:
array_lenth.append(len(field_desc[0]))
else:
array_lenth.append(field_desc[2])
text=connect_width(field_desc[0],field_desc[2])
str_result=str_result+text+" |"
lenth=len(str_result)
for i in range(lenth):
if i==0:
row1=row1+"+"
else:
if i==lenth-1:
row1=row1+"+"
else:
row1=row1+"-"
print row1
print str_result
print row1
for i in cur:
row2="| "
k=0
for j in i:
text=connect_width(j,array_lenth[k])
row2=row2+text+" |"
k=k+1
print row2
print row1
#print "print ok" conn=MySQLdb.connect(
host='localhost',
user='root',
passwd='',
db='mysql_test_db',
#
charset='utf8',
)
cur=conn.cursor()
while 1:
agent =input("Please input cid,input 1 to exit:\n")
ifagent==1:
break
else:
#agent = "C1"
sql="select aid,sum(dollars) from orders where cid=%s group byaid"
cur.execute(sql,[agent])
print "agent_dollars with cid='%s'"%agent
Print_MySqldb_Result(cur)
#print('run ok')
conn.commit()
cur.close()
conn.close()

执行结果:

Python&MySQL的更多相关文章

  1. 【初学python】使用python连接mysql数据查询结果并显示

    因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...

  2. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  3. 使用 python 管理 mysql 开发工具箱 - 1

    Mysql 是一个比较优秀的开源的数据库,很多公司都在使用.作为运维人员,经常做着一些重复性的工作,比如创建数据库实例,数据库备份等,完全都可以使用 python 编写一个工具来实现. 一.模块 Co ...

  4. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  5. Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  6. Python操作Mysql数据库时SQL语句的格式问题

    一.概述 近日使用Python对Mysql数据库进行操作,遇到SQL语句死活出问题的情况.由于最初没有将异常打印出来,一直不知道原因.随后,将异常打印出来之后,通过异常信息,对代码进行修改.最终,成功 ...

  7. Python操作Mysql之基本操作

    pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...

  8. python对Mysql操作和使用ORM框架(SQLAlchemy)

    python对mysql的操作 Mysql 常见操作 数据库操作 创建数据库 create database fuzjtest 删除数据库 drop database fuzjtest 查询数据库 s ...

  9. python操作mysql总结

    Windows系统,python环境搭建. 下载并安装python2.7.11 https://www.python.org/downloads/ 下载并安装python的mysql包: http:/ ...

  10. python使用mysql数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

随机推荐

  1. opencv函数之cv.InRange函数

    2018-03-0421:22:46 (1)cv.InRange函数 void cvInRange(//提取图像中在阈值中间的部分 const CvArr* src,//目标图像const CvArr ...

  2. Java易忘知识点统计

    缺少 内容 替代措施 幂运算 借助Math类的pow方法 注意 内容 备注 const Java保留关键字,未使用 其他 强制类型转换时,若要舍入得到最接近的整数,可以使用Math.round方法 J ...

  3. Win10 “此环境变量太大。此对话框允许将值设置为最长2047个字符。" 解决方法。

    打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 双击右边的 Path (RE ...

  4. document.mozFullScreen

    非标准该特性是非标准的,请尽量不要在生产环境中使用它! 概述 返回一个布尔值,表明当前文档是否处于全屏模式. 语法 var isFullScreen = document.mozFullScreen ...

  5. CAD把自定义实体,变成普通实体(com接口VB语言)

    主要用到函数说明: MxDrawXCustomEvent::MxDrawXCustomEntity::explode 把自定义实体,变成普通实体,详细说明如下: 参数 说明 LONGLONG lEnt ...

  6. 17Oracle Database 维护

    Oracle Database 维护 备份 还原

  7. Python基础之字符的编码

    参考原文 Python廖雪峰 为什么要进行编码? 计算机只能处理二进制数字(0100111),要处理文本,就必须先把文本转为数字才能处理,这个过程就叫编码. 字符的编码 ASCII编码 由于计算机是美 ...

  8. 转自王垠Blog——写给清华大学的退学申请

    清华梦的粉碎—写给清华大学的退学申请(转自王垠Blog)   清华梦的诞生 小时候,妈妈给我一个梦.她指着一个大哥哥的照片对我说,这是爸爸的学生,他考上了清华大学,他是我们中学的骄傲.长大后,你也要进 ...

  9. HDU - 4810 - Wall Painting (位运算 + 数学)

    题意: 从给出的颜料中选出天数个,第一天选一个,第二天选二个... 例如:第二天从4个中选出两个,把这两个进行异或运算(xor)计入结果 对于每一天输出所有异或的和 $\sum_{i=1}^nC_{n ...

  10. 被 idea 坑了的记录篇

    这个星期真的是波折的一周~~~~ 不得不吐槽下无敌坑的自己了,社会我娜姐,坑起来连自己都坑~~ 其实这也不全算我自己的坑,我只是卸载了idea,重新装了一下而已,很神奇的把idea的几个坑全撞了一遍( ...