热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用python操作mysql数据库详解

这篇文章分享使用python操作mysql数据库详解
基础环境:Python 3.5.1

mysql版本:5.6.35 (rpm安装方式)

操作系统:Centos7.3 和windows7

一、python连接数据库模块介绍:

目前主要用的有以下几种、MySQLdb和pymsql以及mysql官方提供的mysql-connector-python驱动,MySQLdb模块是python2.X使用比较多的,而python3.X使用的pymsql会更多一点,以后再研究官方的mysql-connector-python,本次学习以及实践全部基于pymsql模块。

PyMySQL的使用方法和MySQLdb几乎一样,习惯用MySQLdb的,只需 import MySQLdb 修改为 import pymysql 就可以了。

二、pymysql连接数据库的方法以及参数介绍:

pymysql连接mysql 使用pymysql.connect()方法,可以调整很多参数:

示例一、连接192.168.186.157的mysql服务端创建pymysql库字符集为utf8

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

import pymysql

#使用pymysql.connect()方法创建数据库链接

con=pymysql.connect(host='192.168.186.157',user='winner',passwd='123123',port=3306)

#使用con.cursor()方法创建游标

cursor=con.cursor()

sql=" create database If Not Exists pymysql default character set utf8;"

'''sql="""create table if not exists class (id int(10) primary key auto_increment,

name varchar(20) not null ,address varchar(20) not null default "gansu")"""

'''

cursor.execute(sql)

cursor.execute("show databases")

dataname=cursor.fetchall()

print(dataname)

执行结果:

(('information_schema',), ('#mysql50#2017-03-16_09-38-47',), ('DB',), ('mysql',), ('performance_schema',),

('pymysql',), ('test',), ('winner_mas',))

Process finished with exit code 0

示例二、连接刚创建的pymysql数据库创建class表

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

import pymysql

#使用pymysql.connect()方法创建数据库链接

con=pymysql.connect(host='192.168.186.157',user='winner',passwd='123123',port=3306,db='pymysql')

#使用con.cursor()方法创建游标

cursor=con.cursor()

#sql=" create database If Not Exists pymysql default character set utf8;"

sql="""create table if not exists class (id int(10) primary key auto_increment,

name varchar(20) not null ,address varchar(20) not null default "gansu")"""

cursor.execute(sql)

cursor.execute("show tables")

dataname=cursor.fetchall()

print(dataname)

C:\Users\Administrator\AppData\Local\Programs\Python\Python35\python.exe C:/Users/Administrator/PycharmProjects/python/createdatabase.py

(('class',),)

C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\site-packages\pymysql\cursors.py:166: Warning: (1050, "Table 'class' already exists")

result = self._query(query)

Process finished with exit code 0

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

import pymysql

#打开数据库链接

cOnnect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123",db="pymysql",charset="utf8",connect_timeout=3000)

#使用cursor方法获取操作游标

cursor=connect.cursor()

sql=''' insert into class (name,address)

values("JSP","go"),("winner","back"),("GOOD","contine"),("cursor","execute");

'''

#使用execute方法操作数据库

cursor.execute(sql)

#事务提交

#connect.commit()

data=cursor.execute("select * from class order by id desc" )

#使用fetchall方法获取操作结果

data=cursor.fetchmany(5)

print(data)

注意:在这里将事务提交的部分注释掉了,特演示一下不提交事务的情况。

执行结果(执行第四次时):

C:\Users\Administrator\AppData\Local\Programs\Python\Python35\python.exe C:/Users/Administrator/PycharmProjects/python/insertmysql.py

((12, 'cursor', 'execute'), (11, 'GOOD', 'contine'), (10, 'winner', 'back'), (9, 'JSP', 'go'))

Process finished with exit code 0

由此我们发现数据库的事务关系在软件开发的过程当中是相当重要的一部分,所以在对事务处理的时候需要严谨。

提交事务的源代码:

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

import pymysql

#打开数据库链接

cOnnect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123",db="pymysql",charset="utf8",connect_timeout=3000)

#使用cursor方法获取操作游标

cursor=connect.cursor()

sql=''' insert into class (name,address)

values("JSP","go"),("winner","back"),("GOOD","contine"),("cursor","execute");

'''

#使用execute方法操作数据库

cursor.execute(sql)

#事务提交

connect.commit()

data=cursor.execute("select * from class order by id desc" )

#使用fetchall方法获取操作结果

data=cursor.fetchall()

print(data)

#!/usr/bin/python

#encoding=utf-8

# -*- coding:utf-8 -*-

import os

import calendar

import datetime

import MySQLdb

import os, sys, re,string

import time, tarfile,getopt

import socket

import struct

reload(sys)

sys.setdefaultencoding('utf-8')

optmap = {

'dbuser': 'tongji',

'dbpass': '64CE0CEE9A85F22C',

'dbhost': '192.168.1.10',

'dbport': 3306,

'dbname': 'web_basic'

}

code='201613'

now = int(time.time())

msgid=code+str(now)

print msgid

f = file('/home/haoren/nian/1550035_ACCOUNT_'+msgid+'_0001_V2.xml','w+')

f1 = file('/home/haoren/nian/1550035_RELATIONACCOUNTINFO_'+msgid+'_0001_V2.xml','w+')

def log(line):

line = line + "\r\n"

f.write(line)

return

def log1(line):

line = line + "\r\n"

f1.write(line)

return

def sql_select(reqsql):

try:

db_cOnn= MySQLdb.connect(user=optmap['dbuser'], passwd=optmap['dbpass'], host=optmap['dbhost'], port=optmap['dbport'], db=optmap['dbname'], charset='utf8')

db_cursor=db_conn.cursor()

db_conn.query("use %s"%optmap['dbname'])

count = db_cursor.execute(reqsql)

ret = db_cursor.fetchall()

db_cursor.close()

db_conn.close

return ret

except MySQLdb.Error,e:

print "Mysql ERROR %d:%s" %(e.args[0], e.args[1])

return ''

def getusercoin():

reqsql = "select * from singer_auth where status = 10 and ip !='NULL' AND (signtype = '1' OR signtype = '3') limit 150 ;"

#print reqsql

ret = sql_select(reqsql)

n = 0

for row in ret:

n += 1

if n <100 :

print str(row[1])+&#39;,&#39;+str(row[8])

print str(row[0])

print str(row[1])

print str(row[2])

print str(row[3])

if str(row[9]).strip() == &#39;0&#39; and str(row[10]).strip() == &#39;0&#39;:

print str(row[9]) +&#39;,&#39;+ str(row[10])

elif str(row[9]).strip() == &#39;0&#39; and str(row[10]).strip() != &#39;0&#39;:

print str(row[9]) +&#39;,&#39;+str(row[10]).split(&#39;/&#39;)[6]

elif str(row[9]).strip() != &#39;0&#39; and str(row[10]).strip() == &#39;0&#39;:

print str(row[9]).split(&#39;/&#39;)[6] +&#39;,&#39;+str(row[10])

else:

print str(row[9]).split(&#39;/&#39;)[6] +&#39;,&#39;+str(row[10]).split(&#39;/&#39;)[6]

else:

n = 0

getusercoin()

f.close()

f1.close()

#!/usr/bin/env python

#-*-coding:utf-8-*-

#明细

import MySQLdb

import os, sys, re,string

import time, tarfile,getopt

optmap = {

&#39;dbuser&#39; : &#39;haoren&#39;,

&#39;dbpass&#39; : &#39;FqDxhG4d&#39;,

&#39;dbhost&#39; : &#39;192.168.1.10&#39;,

&#39;dbport&#39; : 3306,

&#39;dbname&#39; : &#39;JSDB&#39;

}

def get_files(dir, pattern):

res_file_list =[]

if os.path.exists(dir):

cur_file_list = os.listdir(dir)

for file_name in cur_file_list:

if re.search(pattern, file_name):

res_file_list.append(file_name)

return res_file_list

else:

return &#39;no&#39;

def main():

cur_day = time.strftime("%Y%m%d", time.localtime(time.time()-86400))

opts, args = getopt.getopt(sys.argv[1:], &#39;d:&#39;)

for op, value in opts:

if op == &#39;-d&#39;:

m = re.search(&#39;[0-9]{8}&#39;, value)

if m:

cur_day = value

else:

print "请输入8位日期(比如:20130215)"

return &#39;no&#39;

log_day = time.strftime(&#39;%y%m%d&#39;, time.localtime(time.mktime(time.strptime(cur_day, &#39;%Y%m%d&#39;))))

fmt_day = time.strftime(&#39;%Y-%m-%d&#39;, time.localtime(time.mktime(time.strptime(cur_day, &#39;%Y%m%d&#39;))))

print &#39;结算统计日期:&#39;,fmt_day

#log_day = time.strftime("%y%m%d", time.localtime(time.time()-86400))

dirname="/home/haoren/logdir/%s_67"%log_day

print dirname

db_cOnn= MySQLdb.connect(user=optmap[&#39;dbuser&#39;], passwd=optmap[&#39;dbpass&#39;], host=optmap[&#39;dbhost&#39;], port=optmap[&#39;dbport&#39;], db=optmap[&#39;dbname&#39;])

db_cursor=db_conn.cursor()

db_conn.query("use %s"%optmap[&#39;dbname&#39;])

tabletime = time.strftime("%y%m%d", time.localtime(time.mktime(time.strptime(cur_day, "%Y%m%d"))))

sql="CREATE TABLE IF NOT EXISTS `JIESUANTONGJI_%s` like JIESUANTONGJISAMPLE"%tabletime

db_conn.query(sql)

db_conn.query("delete from JIESUANTONGJI_%s"%tabletime)

if os.path.exists("/tmp/JieSuanTongJi2016.txt"):

os.system("rm -f /tmp/JieSuanTongJi2016.txt")

file_list2=get_files(dirname,&#39;billserver&#39;)

for file2 in file_list2:

command = "cat %s/%s | grep -h -w 结算统计 |grep -v 人民币消费结算统计 >> /tmp/JieSuanTongJi2016.txt"%(dirname,file2)

os.system(command)

#结算统计记录放在txt文档里面

filename=&#39;/tmp/JieSuanTongJi2016.txt&#39;

record = {}

a_file = open(filename, &#39;r&#39;)

#160125-11:00:14 Bill[40268] INFO: [结算统计]时间(1453690814)类别(1)名称(购物卡收入)平台(3977962)等级(2)用户(65147500)赠送(1)个购物卡(39)给客户(65147500),客户等级(28),签约(1), 消耗人民币(100), 客户获得人民币(8000), 平台获得人民币(2000),客户当前人民币(1320960)平台当前人民币(335560)

for a_line in a_file.readlines():

m = re.search("^(\S+) Bill\[\d+\] INFO: \[结算统计\]时间\((\d+)\)类别\((\d+)\)名称\((\S+)\)平台\((\d+)\)等级\((\d+)\)用户\((\d+)\)赠送\((\d+)\)个购物卡\((\d+)\)给客户\((\d+)\),客户等级\((\d+)\),签约\((\d+)\), 消耗人民币\((\d+)\), 客户获得人民币\((\d+)\), 平台获得人民币\((\d+)\),客户当前人民币\((\d+)\)平台当前人民币\((\d+)\)", a_line)

if m:

#print "第一项:"+m.group(1)

#print "第二项:"+m.group(2)

#print "第三项:"+m.group(3)

#print "第四项:"+m.group(4)

#print "第五项:"+m.group(5)

#print "第六项:"+m.group(6)

#print "第七项:"+m.group(7)

#print "第八项:"+m.group(8)

#print "第九项:"+m.group(9)

#print "第十项:"+m.group(10)

#print "第十一项:"+m.group(11)

#print "第十二项:"+m.group(12)

#print "第十三项:"+m.group(13)

#print "第十四项:"+m.group(14)

#print "第十五项:"+m.group(15)

#print "第十六项:"+m.group(16)

#print "第十七项:"+m.group(17)

#print "第十八项:"+m.group(18)

if int(m.group(14)) >0 or int(m.group(15)) >0 :

db_conn.query("insert into JIESUANTONGJI_%s(OPTIME,TYPE,ITEMNAME,CHANNELID,CHANNELLEVEL,PRESENTERID,ITEMNUM,ITEMID,SINGERID,SINGERLEVEL,SIGN,CONSUMECOIN,SINGERRECVGOLD,CHANNELRECVGOLD,CURRENTSINGERGOLD,CURRENTCHANNELGOLD) values(%d,%d,&#39;%s&#39;,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)"%(tabletime,int(m.group(2)),int(m.group(3)),str(m.group(4)),int(m.group(5)),int(m.group(6)),int(m.group(7)),int(m.group(8)),int(m.group(9)),int(m.group(10)),int(m.group(11)),int(m.group(12)),int(m.group(13)),int(m.group(14)),int(m.group(15)),int(m.group(16)),int(m.group(17))))

a_file.close()

db_conn.commit()

db_cursor.close()

db_conn.close()

main()

#if __name__ == "__main__":

# main()

以上就是 使用python操作mysql数据库详解的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • PHP中Smarty模板引擎自定义函数详解
    本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • [附源码]计算机毕业设计JAVAjsp医药管理信息系统
    [附源码]计算机毕业设计JAVAjsp医药管理信息系统项目运行环境配置:Jdk1.8Tomcat7.0MysqlHBuilderX(Webstor ... [详细]
  • 本文详细解析了MySQL中常见的几种错误,并提供了具体的解决方法,帮助开发者快速定位和解决问题。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
author-avatar
红杏出墙的爱_408
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有