Python&MySQL
环境: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的更多相关文章
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- 使用 python 管理 mysql 开发工具箱 - 1
Mysql 是一个比较优秀的开源的数据库,很多公司都在使用.作为运维人员,经常做着一些重复性的工作,比如创建数据库实例,数据库备份等,完全都可以使用 python 编写一个工具来实现. 一.模块 Co ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python操作Mysql数据库时SQL语句的格式问题
一.概述 近日使用Python对Mysql数据库进行操作,遇到SQL语句死活出问题的情况.由于最初没有将异常打印出来,一直不知道原因.随后,将异常打印出来之后,通过异常信息,对代码进行修改.最终,成功 ...
- Python操作Mysql之基本操作
pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...
- python对Mysql操作和使用ORM框架(SQLAlchemy)
python对mysql的操作 Mysql 常见操作 数据库操作 创建数据库 create database fuzjtest 删除数据库 drop database fuzjtest 查询数据库 s ...
- python操作mysql总结
Windows系统,python环境搭建. 下载并安装python2.7.11 https://www.python.org/downloads/ 下载并安装python的mysql包: http:/ ...
- python使用mysql数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
随机推荐
- Dojo - 操作Dom的函数
DOM Manipulation You might be seeing a trend here if you have gotten this far in the tutorial, in th ...
- 【C++】智能指针简述(一):智能指针的引入
智能指针是C++中一种利用RAII机制(后面解释),通过对象来管理指针的一种方式. 在C++中,动态开辟的内存需要我们自己去维护,在出函数作用域或程序异常退出之前,我们必须手动释放掉它,否则的话就会引 ...
- MySQL详解(25)-----------MySQL性能优化
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性 ...
- 富士康的盈利秒杀99%的A股公司:3星|《三联生活周刊》2018年10期
三联生活周刊·最美的数学:天才为何成群到来(2018年10期) 本期专题是数学和成都,我都跳过去没看.其他内容也还有点意思. 总体评价3星. 以下是本期一些内容的摘抄,#号后面是kindle电子版中的 ...
- 音视频】5.ffmpeg命令分类与使用
GT其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定 G: 熟练使用ffmpeg命令!T :不要死记硬背,看一遍,自己找下规律,敲一遍, ...
- laydate.js 月份区间选择插件
laydate.render({ elem: '#reservation2' , type: 'month' , range: true, //format: '2018/09', theme: '# ...
- JavaScipt30(第十个案例)(主要知识点:选中一个数组中间相连部分进行操作的一种思路)
承接上文,第九个案例就不说了,是控制台的一些东西,一般用的很少,了解下就行了,想用的时候再翻api.这是第10个案例: 需要实现的效果是:点击一个checkbox,然后按下shift点击另一个chec ...
- IMDB电影排行爬取分析
一.打开IMDB电影T250排行可以看见250条电影数据,电影名,评分等数据都可以看见 按F12进入开发者模式,找到这些数据对应的HTML网页结构,如下所示 可以看见里面有链接,点击链接可以进入电影详 ...
- JAVA基础——is-a 、have-a、和 like-a的区别
1.is-a,has-a,like-a是什么 在面向对象设计的领域里,有若干种设计思路,主要有如下三种: is-a.has-a.like-a java中在类.接口.抽象类中有很多体现. 了解java看 ...
- cout 按进制数出
头文件: #include<iostream> #include<iomanip> //setbase() #include<bitset> //bitset< ...