python下MySQLdb使用

合集下载

Python连接MySQL并使用fetchall()方法过滤特殊字符

Python连接MySQL并使用fetchall()方法过滤特殊字符

Python连接MySQL并使⽤fetchall()⽅法过滤特殊字符来⼀个简单的例⼦,看Python如何操作数据库,相⽐Java的JDBC来说,确实⾮常简单,省去了很多复杂的重复⼯作,只关⼼数据的获取与操作。

准备⼯作需要有相应的环境和模块:Ubuntu 14.04 64bitPython 2.7.6MySQLdb注意:Ubuntu ⾃带安装了Python,但是要使⽤Python连接数据库,还需要安装MySQLdb模块,安装⽅法也很简单:sudo apt-get install MySQLdb然后进⼊Python环境,import这个包,如果没有报错,则安装成功了:pythonPython 2.7.6 (default, Jun 22 2015, 17:58:13)[GCC 4.8.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import MySQLdb>>>Python标准的数据库接⼝的Python DB-API(包括Python操作MySQL)。

⼤多数Python数据库接⼝坚持这个标准。

不同的数据库也就需要不同额模块,由于我本机装的是MySQL,所以使⽤了MySQLdb模块,对不同的数据库⽽⾔,只需要更改底层实现了接⼝的模块,代码不需要改,这就是模块的作⽤。

Python数据库操作⾸先我们需要⼀个测试表建表语句:CREATE DATABASE study;use study;DROP TABLE IF EXISTS python_demo;CREATE TABLE python_demo (id int NOT NULL AUTO_INCREMENT COMMENT '主键,⾃增',user_no int NOT NULL COMMENT '⽤户编号',user_name VARBINARY(50) NOT NULL COMMENT '⽤户名',password VARBINARY(50) NOT NULL COMMENT '⽤户密码',remark VARBINARY(255) NOT NULL COMMENT '⽤户备注',PRIMARY KEY (id,user_no))ENGINE =innodb DEFAULT CHARSET = utf8 COMMENT '⽤户测试表';INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1001,'张三01','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1002,'张三02','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1003,'张三03','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1004,'张三04','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1005,'张三05','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1006,'张三06','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1007,'张三07','admin','我是张三');INSERT INTO python_demo(user_no, user_name, password, remark) VALUES(1008,'张三08','admin','我是张三');Python代码# --coding=utf8--import ConfigParserimport sysimport MySQLdbdef init_db():try:conn = MySQLdb.connect(host=conf.get('Database', 'host'),user=conf.get('Database', 'user'),passwd=conf.get('Database', 'passwd'),db=conf.get('Database', 'db'),charset='utf8')return connexcept:print "Error:数据库连接错误"return Nonedef select_demo(conn, sql):try:cursor = conn.cursor()cursor.execute(sql)return cursor.fetchall()except:print "Error:数据库连接错误"return Nonedef update_demo():passdef delete_demo():passdef insert_demo():passif __name__ == '__main__':conf = ConfigParser.ConfigParser()conf.read('mysql.conf')conn = init_db()sql = "select * from %s" % conf.get('Database', 'table')data = select_demo(conn, sql)passfetchall()字段特殊字符过滤处理最近在做数据仓库的迁移⼯作,之前数据仓库的数据都是⽤的shell脚本来抽取,后来换了python脚本.但是在把数据抽取存放到hadoop时,出现了⼀个问题:由于数据库字段很多,提前也不知道数据库字段会存储什么内容,hive建表是以\t\n做分隔,这就导致了⼀个问题,如果mysql字段内容⾥⾯本⾝含有\t\n,那么就会出现字段错位情况,并且很头疼的是mysql有100多个字段,也不知道哪个字段会出现这个问题. shell脚本⾥的做法是在需要抽取的字段上⽤mysql的replace函数对字段进⾏替换,例如,假设mysql⾥的字段是column1 varchar(2000),那么很可能就会出现有特殊字符的情况,在查询的sql语句⾥加上select replace(replace(replace(column1,'\r',''),'\n',''),'\t','')之前⼀直是这么⼲的,但是这样写sql特别长,特别是有100多个字段,也不知道哪个有特殊字符,只要都加上.所以在python中对字段不加处理,最终导致hive表字段对应出现偏差,所以在python⾥从mysql查询到的字段在写到⽂件之前需要对每个字段进⾏过滤处理看个例⼦,我就以mysql测试为例,⾸先建⼀张测试表CREATE TABLE `filter_fields` (`field1` varchar(50) DEFAULT NULL,`field2` varchar(50) DEFAULT NULL,`field3` varchar(50) DEFAULT NULL,`field4` varchar(50) DEFAULT NULL,`field5` varchar(50) DEFAULT NULL,`field6` varchar(50) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;有六个字段,都是varchar类型,插⼊新数据可以在⾥⾯插⼊特殊字符.简单插⼊条数据测试看看:insert into filter_fields(field1,field2,field3,field4,field5,field6) VALUES('test01','test02','test03','test04','test05','test06');insert into filter_fields(field1,field2,field3,field4,field5,field6) VALUES('test11\ntest11','test12\n\n','test13','test14','test15','test16');insert into filter_fields(field1,field2,field3,field4,field5,field6) VALUES('test21\ttest21','test22\ttest22\ttest22','test23\t\t\t','test4','test5','test6');insert into filter_fields(field1,field2,field3,field4,field5,field6) VALUES('test21\rest21','test22\r\rest22\r\rest22','test23\r\r\r','test4','test5','test6');其中数据⾥插⼊的特殊字符,可能连在⼀起,也有不连在⼀起的.python测试代码:# coding=utf-8import MySQLdbimport sysdb_host = '127.0.0.1' # 数据库地址db_port = 3306 # 数据库端⼝db_user = 'root' # mysql⽤户名db_pwd = 'yourpassword' # mysql⽤户密码,换成你的密码db_name = 'test' # 数据库名db_table = 'filter_fields' # 数据库表# 过滤sql字段结果中的\t\ndef extract_data(table_name):try:conn = MySQLdb.connect(host=db_host, port = db_port, user=db_user,passwd = db_pwd, db = db_name, charset = "utf8")cursor = conn.cursor()except MySQLdb.Error, e:print '数据库连接异常'sys.exit(1)try:sql = 'select * from %s;'%(table_name)cursor.execute(sql)rows = cursor.fetchall()print '====字段未过滤查询结果===='for row in rows:print rowprint '====字段过滤之后结果===='rows_list = []for row in rows:row_list = []for column in row:row_list.append(column.replace('\t', '').replace('\n', '').replace('\r', ''))rows_list.append(row_list)print rows_list[-1] # [-1]表⽰列表最后⼀个元素return rows_listexcept MySQLdb.Error, e:print '执⾏sql语句失败'cursor.close()conn.close()sys.exit(1)if __name__ == '__main__':print 'begin:'rows = extract_data(db_table)pass看看输出结果:字段未过滤查询结果(u'test01', u'test02', u'test03', u'test04', u'test05', u'test06')(u'test11\ntest11', u'test12\n\n', u'test13', u'test14', u'test15', u'test16')(u'test21\ttest21', u'test22\ttest22\ttest22', u'test23\t\t\t', u'test4', u'test5', u'test6')(u'test21\rest21', u'test22\r\rest22\r\rest22', u'test23\r\r\r', u'test4', u'test5', u'test6')字段过滤之后结果[u'test01', u'test02', u'test03', u'test04', u'test05', u'test06'][u'test11test11', u'test12', u'test13', u'test14', u'test15', u'test16'][u'test21test21', u'test22test22test22', u'test23', u'test4', u'test5', u'test6'][u'test21est21', u'test22est22est22', u'test23', u'test4', u'test5', u'test6']可以看到,制表符,换⾏符,回车都被过滤了.建议:最后说点题外话,不要⼩视\r,回车符.很多⼈以为回车符就是换⾏符,其实不是的,\r表⽰回车符,\n表⽰新⾏.之前代码⾥其实是过滤掉了\t\n的,但是抽取的数据还是不对,后来看了源码之后才发现,原来是没有过滤\r,就这个不同导致了很多数据抽取不对.。

python+mysql实现教务管理系统

python+mysql实现教务管理系统

python+mysql实现教务管理系统本⽂实例为⼤家分享了python实现教务管理系统,供⼤家参考,具体内容如下mysql+python构成教务管理系统,提供系统管理员,教职⼯,学⽣三级。

有注册,添加,修改,发布信息等功能。

Login.py#-*- coding:utf-8 -*-#####系统登录import osimport MySQLdbimport timeclass Login:def __init__(self,conn):self.account = ''self.password = ''self.level = 2self.conn = conndef LoginSurface(self,info):os.system('cls')width = 50title = 'LOGIN'body1 = '[A]Admin'body2 = '[T]Teacher'body3 = '[S]Student'body4 = '[Q]Quit'print '=' * widthprint ' ' * ((width-len(title))/2), titleprint ' ' * ((width-len(body1))/2),body1print ' ' * ((width-len(body1))/2),body2print ' ' * ((width-len(body1))/2),body3print ' ' * ((width-len(body1))/2),body4print ' ' * ((width-len(info))/2), infoprint '-' * widthdef MainFunc(self):err = ''while True:self.LoginSurface(err)level = raw_input('Access:')level = level.upper()if level == 'A':self.level = 0elif level == 'T': self.level = 1elif level == 'S': self.level = 2elif level =='Q': return Falseelse :err = 'Error Action!'continueself.account = raw_input('Account:')self.password = raw_input('Password:')if self.CheckAccount():err = 'Login Success!'self.LoginSurface(err)print 'Please wait...'time.sleep(3)return True;else :err = 'Login Failed!'def GetLoginAccount(self):return [self.account,self.password,self.level]def CheckAccount(self):cur = self.conn.cursor()sqlcmd = "select Account,Password,AccountLevel from LoginAccount where Account = '%s'" % self.accountif cur.execute(sqlcmd) == 0: return Falsetemp = cur.fetchone()cur.close()if temp[1] == self.password and temp[2] == self.level:return Trueelse: return Falsedef Quit(self):passif __name__ == '__main__':conn = MySQLdb.connect(user='root',passwd = '123456',db = 'test');a = Login(conn)a.MainFunc()a.Quit()conn.close()main.py#-*- coding:utf-8 -*-####系统⼊⼝import osimport MySQLdbimport Studentimport Teacherimport Loginimport SystemManagerif __name__ == '__main__':conn = MySQLdb.connect(user='root',passwd = '123456',db = 'test')log = Login.Login(conn)if log.MainFunc():account = log.GetLoginAccount()if account[2] == 0:usr = SystemManager.SystemManager(conn,account[0],account[1])usr.MainFunc()elif account[2] == 1:usr = Teacher.Teacher(conn,account[0],account[1])usr.MainFunc()elif account[2] == 2:usr = Student.Student(conn,account[0],account[1])usr.MainFunc()else :conn.close()raise exception()conn.close()Student.py#-*- coding:utf-8 -*-####学⽣账号import MySQLdbimport osclass Student:def __init__(self,conn,account,passwd):###构造,conn连接数据库cur = conn.cursor()sqlcmd = "select Name,Gender,Birth,Academy,Major,Grade,TeacherNo from StudentInfo where StudentNo = '%s'" % account cur.execute(sqlcmd)res = cur.fetchone()sqlcmd = "select Name from TeacherInfo where TeacherNo = '%s'" % res[6]cur.execute(sqlcmd)TeacherName = cur.fetchone()cur.close()self.width = 150self.conn = connself.account = accountself.Password= passwd = res[0]self.Gender = res[1]self.Birth = res[2]self.Accademy= res[3]self.Major = res[4]self.Grade = res[5]self.Teacher = TeacherName[0]def MainFunc(self):###主要执⾏函数info = ''while True:self.MainSurface(info)choice = raw_input('What to do?')choice = choice.upper()if choice != 'P' and choice != 'M' and choice != 'Q':info = 'Error Action!'continueif choice == 'P':info = self.PersonalInfo()elif choice == 'M':info = self.OperatMessage()else : breakdef PersonalInfo(self):###个⼈信息info = ''while True:self.PersonalInfoSurface(info)choice = raw_input('What to do?')choice = choice.upper()if choice != 'C' and choice != 'Q':info = 'Error Action!'continueif choice == 'C':info = self.ChangePersonalInfo()else : breakreturn infodef ChangePersonalInfo(self):###修改个⼈信息NewGender = self.GenderNewBirth = self.BirthNewPw = self.Passwordwhile True:choice = raw_input('Change Gender?(y/n)')choice = choice.lower()if choice == 'y':NewGender = raw_input('New Gender:')breakelif choice == 'n': breakelse : passwhile True:choice = raw_input('change Born Date?(y/n)')choice = choice.lower()if choice == 'y':NewBirth = raw_input('New Born Date:')breakelif choice == 'n': breakelse : passwhile True:choice = raw_input('change Password?(y/n)')choice = choice.lower()if choice == 'y':NewPw = raw_input('New Password:')breakelif choice == 'n': breakelse : passinfo = 'Change Success!'cur = self.conn.cursor()if NewGender != self.Gender or NewBirth != self.Birth:sqlcmd = "update StudentInfo set Gender = '%s',Birth = '%s' where StudentNo = '%s'" % (NewGender,NewBirth,self.account) if cur.execute(sqlcmd) == 0:self.conn.rollback()cur.close()return 'Change Fail!'if NewPw != self.Password:sqlcmd = "update LoginAccount set Password = '%s' where Account='%s'" % (NewPw,self.account)if cur.execute(sqlcmd) == 0:self.conn.rollback()cur.close()return 'Change Fail!'else :mit()self.Gender = NewGenderself.Birth = NewBirthself.Password = NewPwcur.close()return 'Change Success!'def OperatMessage(self):info = ''while True:self.MessageSurface(info)self.MessageList()choice = raw_input('What to do?')choice = choice.upper()if choice == 'M':msg = input('Message Id:')info = self.MessageInfo(msg)elif choice == 'Q': break;else : info = 'Error Action!'return infodef MessageList(self):###查看消息列表cur = self.conn.cursor()print ''sqlcmd = "select Id,SenderName,SendTime,Title from AllMessage where statu = 'pass' and MsgLevel = 1" if cur.execute(sqlcmd) == 0: returnprint '-' * self.widthwhile True:temp = cur.fetchone()if not temp: break;print '%3d%-20s%-50s%s' % (temp[0],temp[1],temp[3],temp[2])print '-' * self.widthcur.close()def MessageInfo(self,MsgNo):###查看详细消息, No消息编号cur = self.conn.cursor()sqlcmd = "select SenderName,SendTime,Title,Content from AllMessage where Id = %d" % MsgNoif cur.execute(sqlcmd) == 0:cur.close()return 'Read Fail!'article = cur.fetchone()cur.close()os.system('cls')print '=' * self.widthprint ' ' * ((self.width - len(article[2]))/2) , article[2]head = article[0] + ' ' + str(article[1])print ' ' * ((self.width - len(head))/2) , headprint '-' * self.widthprint article[3]print '=' * self.widthraw_input('Press any key to return!')return ''def Quit(self):###退出passdef MainSurface(self,info):###主界⾯os.system('cls')print '=' * self.widthtitle = 'Welcome %s!' % body1 = '[P]Personal Information'body2 = '[M]Message'body3 = '[Q]Quit'print ' ' * ((self.width - len(title))/2),titleprint ' ' * ((self.width - len(body1))/2),body1print ' ' * ((self.width - len(body1))/2),body2print ' ' * ((self.width - len(body1))/2),body3print ' ' * ((self.width - len(info))/2),infoprint '=' * self.widthdef MessageSurface(self,info):###消息界⾯os.system('cls')print '=' * self.widthtitle = 'MESSAGES'body1 = '[M]Message Detail'body2 = '[Q]Quit'print ' ' * ((self.width - len(title))/2),titleprint ' ' * ((self.width - len(body1))/2),body1print ' ' * ((self.width - len(body1))/2),body2print ' ' * ((self.width - len(info))/2),infoprint '=' * self.widthdef PersonalInfoSurface(self,info):###个⼈信息界⾯os.system('cls')print '=' * self.widthtitle = 'PERSONAL INFORMATION'body1 = '[C]Change Information'body2 = '[Q]Quit'print ' ' * ((self.width - len(title))/2),titleprint ' ' * ((self.width - len(body1))/2),body1print ' ' * ((self.width - len(body1))/2),body2print ' ' * ((self.width - len(info))/2),infoprint '-' * self.widthbody3 = ' Name: %s' % body4 = 'Student Number: %s' % self.accountbody5 = ' Gender: %s' % self.Genderbody6 = ' Birth: %s' % self.Birthbody7 = ' Accademy: %s' % self.Accademybody8 = ' Major: %s' % self.Majorbody9 = ' Grade: %s' % self.Gradebody10= ' Teacher: %s' % self.Teacherprint ' ' * ((self.width - len(body6))/2),body3print ' ' * ((self.width - len(body6))/2),body4print ' ' * ((self.width - len(body6))/2),body5print ' ' * ((self.width - len(body6))/2),body6print ' ' * ((self.width - len(body6))/2),body7print ' ' * ((self.width - len(body6))/2),body8print ' ' * ((self.width - len(body6))/2),body9print ' ' * ((self.width - len(body6))/2),body10print '=' * self.widthif __name__ == '__main__':conn = MySQLdb.connect(user='root',passwd = '123456',db = 'test')stu = Student(conn,'0000001','123456')stu.MainFunc()conn.close()完整代码请点击下载:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

python jdbc连接数据库 定义方法

python jdbc连接数据库 定义方法

python jdbc连接数据库定义方法JDBC连接是一种在Python编程语言中与数据库进行交互的标准方法。

它是一种简单而强大的工具,允许我们通过Python代码来执行SQL语句、查询数据库和更新数据。

本文将一步一步地详细介绍如何使用Python JDBC连接数据库的方法。

第一步:安装JDBC驱动程序要使用JDBC连接数据库,我们需要安装相应的JDBC驱动程序。

根据您所使用的数据库类型,您需要下载相应的JDBC驱动程序。

例如,如果您使用的是MySQL数据库,您可以从MySQL官方网站下载MySQL JDBC驱动程序。

确保将驱动程序文件保存在适当的位置,以便在后续步骤中引用它。

第二步:导入必要的模块要在Python中使用JDBC连接数据库,我们需要导入合适的模块。

常用的模块包括`jaydebeapi`和`pyodbc`。

`jaydebeapi`模块是一个纯Python模块,可用于通过JDBC连接到多种数据库。

而`pyodbc`模块则是一个用于连接到ODBC数据库的模块。

根据您的数据库类型和个人偏好,您可以选择导入相应的模块。

第三步:建立数据库连接一旦我们导入了所需的模块,我们就可以开始建立数据库连接了。

对于大多数数据库,我们需要提供以下连接参数:数据库URL、用户名以及密码。

这些参数将用于验证和建立与数据库的连接。

对于`jaydebeapi`模块,我们可以使用`jaydebeapi.connect()`函数来建立数据库连接。

以下是一个示例代码:pythonimport jaydebeapi# 定义数据库连接参数database_url = "jdbc:mysql:localhost:3306/mydatabase" username = "myuser"password = "mypassword"# 建立数据库连接conn = jaydebeapi.connect("com.mysql.jdbc.Driver", database_url, [username, password])对于`pyodbc`模块,我们可以使用`pyodbc.connect()`函数来建立数据库连接。

python操作数据库的主要步骤

python操作数据库的主要步骤

python操作数据库的主要步骤Python 操作数据库的主要步骤1. 导入必要的模块使用 Python 操作数据库需要导入必要的模块。

最常用的模块是 `sqlite3`,它提供对 SQLite 数据库的接口。

对于更高级的数据库系统,可以使用 `MySQLdb`、`psycopg2` 或 `pymongo` 等特定于数据库的模块。

2. 连接到数据库使用 `sqlite3.connect()` 或特定数据库模块提供的类似函数建立与数据库的连接。

此函数通常需要数据库文件或服务器地址、用户名和密码等参数。

3. 创建游标对象游标对象允许与数据库交互并执行查询和更新。

使用`connection.cursor()` 创建一个游标对象。

4. 执行查询使用游标对象的 `execute()` 方法执行 SQL 查询。

查询可以是简单的选择语句或更复杂的语句,如更新、插入或删除。

5. 提取结果查询执行后,可以使用游标对象的 `fetchall()` 或`fetchone()` 方法提取结果。

这些方法返回一个包含查询结果的元组或列表。

6. 提交更改(对于更新操作)对于需要修改数据库的更新操作,例如插入或删除,需要使用`mit()` 方法显式提交更改。

7. 关闭连接完成所有操作后,必须关闭数据库连接以释放资源。

使用`connection.close()` 方法关闭连接。

示例:使用 SQLite3 查询数据库```pythonimport sqlite3# 连接到数据库connection = sqlite3.connect('mydb.db') # 创建游标对象cursor = connection.cursor()# 执行查询cursor.execute('SELECT FROM users')# 提取结果results = cursor.fetchall()# 处理结果for row in results:print(row)# 关闭连接cursor.close()connection.close()```其他注意事项对于更高级的数据库系统,安全连接至数据库可能需要额外的配置,如 SSL 认证或访问控制。

pymysql_python操作MySQL数据库

pymysql_python操作MySQL数据库

pymysql_python操作MySQL数据库1 数据的介绍概念:数据库是⼀个⽤来存放数据的仓库,是按照⼀定的数据结构来存储、组织和管理数据。

分类⽅法:关系型数据库:Mysql(开源),Oracle(收费,银⾏使⽤),SQL Server(收费),SQLite等⾮关系型数据库:redis,mongodb等Python操作Mysql数据库的⼏种⽅式MysqlDB是早期python2.x时代所使⽤⼯具,但是由于现在已经进⼊python3.x时代,已经不再使⽤这个⼯具了。

mysqlclient是mysqldb衍⽣版本,完全兼容mysqldb。

是django框架的orm映射⼯具pymysql是纯python实现的驱动,也兼容mysqldb也是我们重点学习的⼯具sqlalchemy是即⽀持原⽣SQL,也⽀持ORM的⼯具,类似于java的hibernate2 数据库的基本操作1 pymysql的安装在线安装:打开cmd输⼊命令pip install pymysql2 pymysql操作数据库的流程流程图:流程的⽂字描述:1 导包2 建⽴连接3 获取游标4 执⾏SQL语句5 关闭游标6 关闭连接3 案例数据准备先启动数据库,我们使⽤phpstudy来启动如下图所⽰,如果Mysql右边的绿点是绿⾊的,那么就证明mysql启动了连接到数据库通过navicat⼯具来连接数据库打开navicat,然后新建连接确认测试连接成功后,点击确定(不是测试连接成功的确定,⽽是建⽴连接的确定)连接到数据库然后打开数据库,点击顶部查询然后点击下⾯的新建查询检查有没有运⾏成功的⽅式:先关闭当前的数据库连接,然后重新连接到数据库下⾯是sql语句:CREATE DATABASE IF NOT EXISTS books default charset utf8;USE books;DROP TABLE IF EXISTS `t_book`;CREATE TABLE `t_book` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(20) NOT NULL COMMENT '图书名称',`pub_date` date NOT NULL COMMENT '发布⽇期',`read` int(11) NOT NULL DEFAULT '0' COMMENT '阅读量',`comment` int(11) NOT NULL DEFAULT '0' COMMENT '评论量',`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图书表';INSERT INTO `t_book` VALUES ('1', '射雕英雄传', '1980-05-01', '12', '34', '0');INSERT INTO `t_book` VALUES ('2', '天龙⼋部', '1986-07-24', '36', '40', '0');INSERT INTO `t_book` VALUES ('3', '笑傲江湖', '1995-12-24', '20', '80', '0');DROP TABLE IF EXISTS `t_hero`;CREATE TABLE `t_hero` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL COMMENT '姓名',`gender` smallint(6) NOT NULL COMMENT '性别',`description` varchar(200) DEFAULT NULL COMMENT '描述',`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除',`book_id` int(11) NOT NULL COMMENT '所属图书ID',PRIMARY KEY (`id`),KEY `t_hero_book_id` (`book_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='英雄⼈物表';INSERT INTO `t_hero` VALUES ('1', '郭靖', '1', '降龙⼗⼋掌', '0', '1');INSERT INTO `t_hero` VALUES ('2', '黄蓉', '0', '打狗棍法', '0', '1');INSERT INTO `t_hero` VALUES ('3', '乔峰', '1', '降龙⼗⼋掌', '0', '2');INSERT INTO `t_hero` VALUES ('4', '令狐冲', '1', '独孤九剑', '0', '3');INSERT INTO `t_hero` VALUES ('5', '任盈盈', '0', '弹琴', '0', '3');4 数据库基本操作连接数据库⽰例代码# 1 导包# 注意如果导⼊的pymysql是黄⾊的,那么有可能你的项⽬名称和python⽂件名称是pymysql导致导包导⼊错误# 如果是⼀个波浪线,有可能没有选择运⾏环境和没有安装pymysqlimport pymysql# 2 建⽴连接conn = pymysql.connect(host='localhost', user='root', password='root', port=3306)# 3 获取游标cursor = conn.cursor()# 4 执⾏SQL语句:执⾏查询数据库版本的SQL语句# 注意SQL语句当中的符号都必须是英⽂的符号cursor.execute("select version();")# 打印执⾏的结果# 获取执⾏结果result = cursor.fetchone()# 打印查询结果print("result=", result)# 5 关闭游标cursor.close()# 6 关闭连接conn.close()数据库查询操作代码# 1 导包import pymysql# 2 建⽴连接:连接到数据库(host:localhost username:root password:root database:books)conn = pymysql.connect(host='localhost', user='root', password='root', database='books')# 3 获取游标curcor = conn.cursor()# 4 执⾏SQL语句:# 查询图书表的数据(包括:图书id、图书名称、阅读量、评论量)curcor.execute("select id,title,`read`,`comment` from t_book;")# 获取查询结果的总记录数:curcor.rowcount的意思是获取执⾏SQL语句之后影响的⾏数print("总记录数:", curcor.rowcount)# 获取查询结果的第⼀条数据print("第⼀条数据:", curcor.fetchone())# 获取全部的查询结果# 注意:如果在上⾯先运⾏的cursor.fetchone()那么,数据的指针会下移,导致cursor.fetchall()获取的数据# 会缺少⼀⾏。

pyodbc pymssql 用法

pyodbc pymssql 用法

一、介绍pyodbc和pymssqlpyodbc和pymssql都是Python语言中用于操作数据库的库,它们可以帮助开发者连接数据库并执行SQL语句,从而实现对数据库的增删改查操作。

本文将介绍pyodbc和pymssql的用法,包括安装、连接数据库、查询数据、插入数据、更新数据和删除数据等方面。

通过学习本文,读者将能够熟练使用pyodbc和pymssql来操作数据库,提高对数据库的管理能力。

二、安装pyodbc和pymssql1. 使用pip安装pyodbc:```bashpip install pyodbc```2. 使用pip安装pymssql:```bashpip install pymssql```安装完毕后,即可开始使用pyodbc和pymssql进行数据库操作。

三、连接数据库1. 使用pyodbc连接数据库:```pythonimport pyodbcconn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=your_server;DATABASE=your_database;UID=your _username;PWD=your_password')```2. 使用pymssql连接数据库:```pythonimport pymssqlconn = pymssql.connect(server='your_server',user='your_username', password='your_password', database='your_database')```通过上述代码,即可成功连接数据库。

四、查询数据1. 使用pyodbc查询数据:```pythoncursor = conn.cursor()cursor.execute('SELECT * FROM your_table')for row in cursor:print(row)```2. 使用pymssql查询数据:```pythoncursor = conn.cursor()cursor.execute('SELECT * FROM your_table')for row in cursor:print(row)```通过上述代码,即可成功查询数据。

PythonMySQLdb的execute和executemany的使用

PythonMySQLdb的execute和executemany的使用

PythonMySQLdb的execute和executemany的使⽤如果使⽤executemany对数据进⾏批量插⼊的话,要注意⼀下事项:conn = MySQLdb.connect(host = “localhost”, user = “root”, passwd = “password”, db = “myDB”, charset=’utf8′)cursor = conn.cursor()sql = “insert into myTable (created_day,name,count) values(%s,%s,%s) ON DUPLICATE KEY UPDATE count=count+values(count)”args=[("2012-08-27","name1",100),("2012-08-27","name1",200),("2012-08-27","name2",300)]try:cursor.executemany(sql, args)except Exception as e:print0(“执⾏Mysql: %s 时出错:%s” % (sql, e))finally:cursor.close()mit()conn.close()这⾥args是⼀个包含多个元组的数组,每个元组对应mysql当中的⼀条数据,注意这⾥的created_day对应的%s没有引号。

这⾥推测executemany⾃⼰⾸先对sql语句进⾏正则匹配%s然后在此基础上,对字符串进⾏嵌⼊处理,如果这⾥%s加上引号的话,插⼊mysql当中会出现”0000-00-00″类型的错误⽇期。

如果⼀次性要插⼊很多条数据的话,在这⾥强烈推荐使⽤executemany,从⾃⼰体会来讲,⼀条⼀条的insert需要2-3个⼩时时间的数据插⼊,使⽤executemany只需要2-3秒在这⾥executemany和ON DUPLICATE KEY UPDATE联合使⽤的时候如果按照sql常规模式,即:sql=”insert into myTable(created_day,name,count) values(%s,%s,%s) ON DUPLICATE KEY UPDATE count=count+%s”会报bug:not all arguments converted during string formatting。

Python数据传输

Python数据传输

Python数据传输Python是一种高级编程语言,具有简单易学、灵活多变的特点,广泛应用于各个领域。

数据传输是Python中一个重要的概念,它指的是将数据从一个地方传输到另一个地方的过程。

在本文中,我将介绍Python中常用的数据传输方法和技术。

一、文件传输在许多情况下,我们需要将文件从一台计算机传输到另一台计算机。

Python提供了多种文件传输的方法,下面是其中几种常用的方式:1. 使用shutil模块进行文件传输:import shutilshutil.copy(source, destination)上述代码将源文件复制到目标文件夹中。

2. 使用ftplib模块进行FTP传输:from ftplib import FTPftp = FTP(host)ftp.login(user, passwd)ftp.retrbinary('RETR ' + filename, open(local_filename, 'wb').write)上述代码建立了与FTP服务器的连接,并从服务器下载文件到本地。

二、网络传输网络传输是指通过网络将数据从一个节点传输到另一个节点。

Python提供了多个库和模块来处理网络传输,下面是两个常用的库的示例:1. 使用socket模块进行网络传输:import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.sendall(data)上述代码创建了一个TCP套接字,并将数据发送到已连接的节点。

2. 使用requests库进行HTTP传输:import requestsr = requests.get(url)上述代码发送一个HTTP GET请求,并返回服务器响应的数据。

三、数据库传输在数据处理过程中,我们通常需要与数据库进行交互。

Python提供了多种方式与数据库进行数据传输,下面是两个常用的库的示例:1. 使用MySQLdb库进行MySQL数据库传输:import MySQLdbdb = MySQLdb.connect(host, user, passwd, db)cursor = db.cursor()cursor.execute(sql)上述代码连接到MySQL数据库,并执行给定的SQL语句。

【Python】python更新数据库脚本两种方法

【Python】python更新数据库脚本两种方法

【Python】python更新数据库脚本两种⽅法最近项⽬的两次版本迭代中,根据业务需求的变化,需要对数据库进⾏更新,两次分别使⽤了不同的⽅式进⾏更新。

第⼀种:使⽤python的MySQLdb模块利⽤原⽣的sql语句进⾏更新1 import MySQLdb2 #主机名3 HOST = '127.0.0.1'4 #⽤户名5 USER = "root"6 #密码7 PASSWD = "123456"8 #数据库名9 DB = "db_name"10 # 打开数据库连接11 db=MySQLdb.connect(HOST,USER,PASSWD,DB)12 # 获取操作游标13 cursor=db.cursor()1415 if __name__ == '__main__':1617 if cursor:18 command_a = "update tables_one set status=5 where status=0"19 # 使⽤execute⽅法执⾏SQL语句20 cursor.execute(command_a)21 # 提交到数据库执⾏22 mit()2324 command2 = "select field from tables_one where id =12"25 ret2 = cursor.execute(command2)26 # 获取所有记录列表27 ret2=cursor.fetchall()28 for item in ret2:29 command3 = "insert into tables_two(name) values (%s);" % (item[0])30 fin=cursor.execute(command3)31 mit()32 # 关闭数据库连接33 db.close()数据库查询三种⽅式fetchone(): 该⽅法获取下⼀个查询结果集。

pymysql使用方法

pymysql使用方法

pymysql使用方法pymysql 是一款用于 Python 操作 MySQL 数据库的模块。

下面是一个简单的使用示例:1. 安装 pymysql使用 pip 命令安装 pymysql:```pip install pymysql```2. 导入 pymysql 模块导入 pymysql 模块,并建立一个连接:```import pymysqlconn = pymysql.connect(host="localhost", user="username", passwd="password", db="database_name", charset="utf8mb4")```其中,host 表示数据库连接地址,user 表示用户名,passwd 表示密码,db 表示数据库名,charset 表示字符集。

3. 生成游标使用游标可以进行数据的增删改查操作。

在生成游标后,可以通过游标遍历数据库中的数据,并进行相应的操作。

```cur = conn.cursor()```4. 执行 SQL 语句使用游标执行 SQL 语句。

在执行 SQL 语句前,需要先连接数据库,并设置字符集。

```cur.execute("SELECT * FROM table_name")```5. 提交语句提交语句并关闭游标和连接。

```cur.close()conn.close()```6. 完整代码示例```import pymysqlconn = pymysql.connect(host="localhost", user="username", passwd="password", db="database_name", charset="utf8mb4")cur = conn.cursor()sql = "SELECT * FROM table_name"cur.execute(sql)for row in cur:print(row)cur.close()conn.close()```上述示例代码中,我们通过 pymysql 模块建立了一个连接,并使用游标遍历了数据库中的数据。

python操作mysql数据库实现增删改查

python操作mysql数据库实现增删改查

python操作mysql数据库实现增删改查Python 标准数据库接⼝为 Python DB-API,Python DB-API为开发⼈员提供了数据库应⽤编程接⼝。

Python 数据库接⼝⽀持⾮常多的数据库,你可以选择适合你项⽬的数据库:GadFlymSQLPostgreSQLMicrosoft SQL Server 2000InformixInterbaseOracleSybase你可以访问查看详细的⽀持数据库列表。

不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。

DB-API 是⼀个规范. 它定义了⼀系列必须的对象和数据库存取⽅式, 以便为各种各样的底层数据库系统和多种多样的数据库接⼝程序提供⼀致的访问接⼝。

Python的DB-API,为⼤多数的数据库实现了接⼝,使⽤它连接各数据库后,就可以⽤相同的⽅式操作各数据库。

Python DB-API使⽤流程:引⼊ API 模块。

获取与数据库的连接。

执⾏SQL语句和存储过程。

关闭数据库连接。

什么是MySQLdb?MySQLdb 是⽤于Python链接Mysql数据库的接⼝,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建⽴的。

如何安装MySQLdb?为了⽤DB-API编写MySQL脚本,必须确保已经安装了MySQL。

复制以下代码,并执⾏:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb如果执⾏后的输出结果如下所⽰,意味着你没有安装 MySQLdb 模块:Traceback (most recent call last):File "test.py", line 3, in <module>import MySQLdbImportError: No module named MySQLdb安装MySQLdb,请访问,(Linux平台可以访问:)从这⾥可选择适合您的平台的安装包,分为预编译的⼆进制⽂件和源代码安装包。

python连接mysql数据库(用with关键字)

python连接mysql数据库(用with关键字)

python连接mysql数据库(⽤with关键字)#import mysql.connectorimport pymysql#mydb = mysql.connector.connect(# host = "localhost",# user = "root",# passwd = "123456",# database = "mysql")##mycursor = mydb.cursor()#mycursor.execute("show tables")#for i in mycursor:# print(i)class DB(object):def__init__(self, host="localhost", port=3306, db="", user="root", passwd="123456", charset="utf8"):# 创建数据库连接self.dbconn = pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset=charset) # 创建字典型游标(返回的数据是字典类型)self.dbcur = self.dbconn.cursor(cursor = pymysql.cursors.DictCursor)# __enter__() 和 __exit__() 是with关键字调⽤的必须⽅法# with本质上就是调⽤对象的enter和exit⽅法def__enter__(self):# 返回游标return self.dbcurdef__exit__(self, exc_type, exc_value, exc_trace):# 提交事务mit()# 关闭游标self.dbcur.close()# 关闭数据库连接self.dbconn.close()if__name__ == "__main__":with DB(db="test") as db:# db.execute("show databases")db.execute("select count(*) from test1")print(db)for i in db:print(i)。

py调用存储过程方式

py调用存储过程方式

py调用存储过程方式py调用存储过程是利用python程序,调用SQL的存储过程,实现更为强大的数据库操作。

尤其是当我们希望能做到把复杂的SQL操作代码封装后,可以像使用普通python函数一样调用,实现较为复杂的功能时,就可以有效节省时间和工作量。

本文将重点介绍如何使用python调用存储过程。

首先,我们需要安装MySQLdb模块,它是python的一个库,可以使用它来操作MySQL数据库。

然后,要使用MySQLdb模块调用存储过程,需要建立一个数据库连接,然后使用cursor()方法获取一个游标,游标是MySQL的一个抽象概念,可以被看做是一条畅通的通道,连接数据库和python程序。

获取游标后,我们可以使用callproc()方法定义存储过程及其参数列表,然后使用execute()方法对存储过程进行调用。

callproc()方法调用存储过程,返回一个正常结果集,所有存储过程的输出参数也可以通过这个结果集获取到。

另外,我们还可以使用executemany()方法来对一个存储过程批量执行多个参数,比如,如果我们想同时对一个存储过程调用10次,我们只需要使用一次executemany()方法,便可以把存储过程的参数放入一个列表中,然后就可以一次性执行多次存储过程调用。

此外,python还提供了fetchall()方法,用来获取存储过程执行后返回的结果,我们只需要使用一句话就可以调用所有结果。

因此,当我们编写python程序时,可以把复杂的SQL操作封装成存储过程,然后调用fetchall()方法就可以完成所有的SQL操作。

总结一下,在使用python调用存储过程的过程中,首先我们需要安装MySQLdb库,然后建立数据库连接,获取游标,通过callproc()方法定义存储过程及其参数列表,然后使用execute()或executemany()方法对存储过程进行调用,最后获取存储过程执行后的结果。

通过python调用存储过程,不仅简化了数据库操作流程,而且可以很好地封装复杂的SQL操作,可以把复杂的操作代码封装后,像使用普通函数一样调用,达到节省时间和工作量的效果。

python中获取数据库查询结果的方法

python中获取数据库查询结果的方法

python中获取数据库查询结果的方法在Python开发过程中,与数据库的交互是常见的需求。

掌握如何获取数据库查询结果,对于进行数据分析和处理至关重要。

本文将详细介绍在Python中获取数据库查询结果的几种方法。

### 1.使用内置的sqlite3模块Python内置了`sqlite3`模块,可以方便地操作SQLite数据库。

```pythonimport sqlite3# 连接到SQLite数据库conn = sqlite3.connect("example.db")# 创建一个游标对象cursor = conn.cursor()# 执行SQL查询cursor.execute("SELECT * FROM table_name")# 获取查询结果rows = cursor.fetchall()for row in rows:print(row)# 关闭连接conn.close()```### 2.使用MySQLdb或PyMySQL如果需要操作MySQL数据库,可以使用`MySQLdb`或`PyMySQL`库。

#### 使用MySQLdb:```pythonimport MySQLdb# 连接到MySQL数据库conn = MySQLdb.connect(host="localhost", user="root", passwd="password", db="database_name")# 创建游标对象cursor = conn.cursor()# 执行SQL查询cursor.execute("SELECT * FROM table_name")# 获取查询结果rows = cursor.fetchall()for row in rows:print(row)# 关闭连接conn.close()```#### 使用PyMySQL:```pythonimport pymysql# 连接到MySQL数据库conn = pymysql.connect(host="localhost", user="root", password="password", database="database_name")# 创建游标对象cursor = conn.cursor()# 执行SQL查询cursor.execute("SELECT * FROM table_name")# 获取查询结果rows = cursor.fetchall()for row in rows:print(row)# 关闭连接conn.close()```### 3.使用SQLAlchemy`SQLAlchemy`是一个功能强大的SQL工具包和对象关系映射(ORM)框架。

python-mysql里cursor执行方法

python-mysql里cursor执行方法

python-mysql⾥cursor执⾏⽅法python 操作数据库,要安装⼀个Python和数据库交互的包MySQL-python-1.2.2.win32-py2.5.exe,然后我们就可以使⽤MySQLdb这个包进⾏数据库操作了。

操作步骤如下:1、建⽴数据库连接import MySQLdbconn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable") cursor=conn.cursor()2、执⾏数据库操作n=cursor.execute(sql,param)我们要使⽤连接对象获得⼀个cursor对象,接下来,我们会使⽤cursor提供的⽅法来进⾏⼯作.这些⽅法包括两⼤类:1.执⾏命令,2.接收返回值3、cursor⽤来执⾏命令的⽅法: callproc(self, procname, args):⽤来执⾏存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的⾏数 execute(self, query, args):执⾏单条sql语句,接收的参数为sql语句本⾝和使⽤的参数列表,返回值为受影响的⾏数 executemany(self, query, args):执⾏单挑sql语句,但是重复执⾏参数列表⾥的参数,返回值为受影响的⾏数 nextset(self):移动到下⼀个结果集 4、cursor⽤来接收返回值的⽅法: fetchall(self):接收全部的返回结果⾏. fetchmany(self, size=None):接收size条返回结果⾏.如果size的值⼤于返回的结果⾏的数量,则会返回cursor.arraysize条数据. fetchone(self):返回⼀条结果⾏. scroll(self, value, mode='relative'):移动指针到某⼀⾏.如果mode='relative',则表⽰从当前所在⾏移动value条,如果mode='absolute',则表⽰从结果集的第⼀⾏移动value条.5、下⾯的代码是⼀个完整的例⼦.#使⽤sql语句,这⾥要接收的参数都⽤%s占位符.要注意的是,⽆论你要插⼊的数据是什么类型,占位符永远都要⽤%ssql="insert into cdinfo values(%s,%s,%s,%s,%s)"#param应该为tuple或者listparam=(title,singer,imgurl,url,alpha)#执⾏,如果成功,n的值为1n=cursor.execute(sql,param)#再来执⾏⼀个查询的操作cursor.execute("select * from cdinfo")#我们使⽤了fetchall这个⽅法.这样,cds⾥保存的将会是查询返回的全部结果.每条结果都是⼀个tuple类型的数据,这些tuple组成了⼀个tuple cds=cursor.fetchall()#因为是tuple,所以可以这样使⽤结果集print cds[0][3]#或者直接显⽰出来,看看结果集的真实样⼦print cds#如果需要批量的插⼊数据,就这样做sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"#每个值的集合为⼀个tuple,整个参数集组成⼀个tuple,或者listparam=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))#使⽤executemany⽅法来批量的插⼊数据.这真是⼀个很酷的⽅法!n=cursor.executemany(sql,param)需要注意的是(或者说是我感到奇怪的是),在执⾏完插⼊或删除或修改操作后,需要调⽤⼀下mit()⽅法进⾏提交.这样,数据才会真正保存在数据库中.我不清楚是否是我的mysql设置问题,总之,今天我在⼀开始使⽤的时候,如果不⽤commit,那数据就不会保留在数据库中,但是,数据确实在数据库呆过.因为⾃动编号进⾏了累积,⽽且返回的受影响的⾏数并不为0.6、关闭数据库连接需要分别的关闭指针对象和连接对象.他们有名字相同的⽅法cursor.close()conn.close()Django操作数据库django是⼀个出⾊的⽤于python的web框架。

pymysql的用法

pymysql的用法

pymysql的用法摘要:1.pymysql 的安装2.连接数据库3.创建数据库4.插入数据5.查询数据6.更新数据7.删除数据8.关闭数据库连接正文:pymysql 是一个用于操作MySQL 数据库的Python 模块,它提供了丰富的数据库操作方法,包括连接数据库、创建数据库、插入数据、查询数据、更新数据和删除数据等。

下面将详细介绍pymysql 的用法。

首先,需要安装pymysql 模块。

通过在命令行中输入“pip install pymysql”即可完成安装。

安装完成后,即可开始使用pymysql 操作数据库。

1.连接数据库在使用pymysql 之前,需要先连接到数据库。

使用pymysql.connect() 方法可以实现数据库连接。

该方法需要三个参数:数据库的主机地址、数据库用户名和数据库密码。

例如:```import pymysqldb = pymysql.connect(host="localhost", user="user",password="password")```2.创建数据库如果需要创建一个新的数据库,可以使用pymysql.create_database() 方法。

该方法需要提供一个数据库名字作为参数。

例如:```db.create_database("new_database")```3.插入数据向数据库中插入数据时,需要先使用pymysql.cursors() 方法创建一个游标对象,然后使用游标对象的execute() 方法执行SQL 插入语句。

例如:```cursor = db.cursor()sql = "INSERT INTO table_name (column1, column2) VALUES(%s, %s)"cursor.execute(sql, ("value1", "value2"))```4.查询数据查询数据库中的数据时,同样需要先创建一个游标对象,然后使用游标对象的execute() 方法执行SQL 查询语句。

pythondb类用法说明

pythondb类用法说明

pythondb类⽤法说明我就废话不多说了,⼤家还是直接看代码吧~import pymysqlclass DB:__host = 'localhost' # 服务器地址__username = 'root' # ⽤户名__password = '' # 密码__database = 'test' # 数据库__field = '*' # 查询字段__where = '' # 条件__sql = False # 是否返回sql__join = '' # 联表__order = '' # 排序__limit = '' # 数量# 构造函数,在⽣成对象时调⽤def __init__(self, table):try:# 打开数据库连接 host, username, password, databaseself.db = pymysql.connect(self.__host, self.__username, self.__password, self.__database)except Exception as e:print(e)exit()# 使⽤ cursor() ⽅法创建⼀个游标对象 cursorself.cursor = self.db.cursor()self.table = table# 析构函数,释放对象时使⽤def __del__(self):try:# 关闭数据库连接self.db.close()except Exception as e:print(e)# 得到当前sql语句def getSql(self):self.__sql = Truereturn self# 字段def field(self, str):self.__field = strreturn self# 联表def join(self, table, where):self.__join = ' LEFT JOIN ' + table + ' ON ' + where + ' 'return self# 条件def where(self, param):self.__where = ' WHERE 'if isinstance(param, list):for i in param:if isinstance(i[2], list):tmp = '('for j in i[2]:tmp += str(j) + ','tmp += ')'self.__where += '`' + i[0] + '` ' + i[1] + ' ' + tmp + ' AND 'else:self.__where += '`' + i[0] + '` ' + i[1] + ' ' + str(i[2]) + ' AND 'else:self.__where = self.__where[0:-4]else:self.__where += paramreturn self# 排序def order(self, str):self.__order = ' ORDER BY ' + strreturn self# 数量def limit(self, str):self.__limit = ' LIMIT ' + strreturn self# 增加def insert(self, dict):key = value = ''for k, v in dict.items():key += '`' + k + '`,'value += '"' + v + '",'key = key[0:-1]value = value[0:-1]sql = 'INSERT INTO ' + self.table + ' (' + key + ') VALUES (' + value + ')' if self.__sql:return sqltry:# 执⾏sql语句ret = self.cursor.execute(sql)# 提交到数据库执⾏mit()return retexcept Exception as e:# 如果发⽣错误则回滚self.db.rollback()print(e)return 0# 删除def delete(self):if self.__where:sql = "DELETE FROM " + self.table + self.__whereif self.__sql:return sqltry:# 执⾏sql语句ret = self.cursor.execute(sql)# 提交到数据库执⾏mit()return retexcept Exception as e:# 如果发⽣错误则回滚self.db.rollback()print(e)return 0else:raise BaseException('没有条件') # 抛异常# 修改def update(self, dict):str = ''for k, v in dict.items():str += '`' + k + '`="' + v + '",'str = str[0:-1]sql = 'UPDATE ' + self.table + ' SET ' + strif self.__where:sql += self.__whereif self.__sql:return sqltry:# 执⾏sql语句ret = self.cursor.execute(sql)# 提交到数据库执⾏mit()return retexcept Exception as e:# 如果发⽣错误则回滚self.db.rollback()print(e)return 0# 查询def select(self):sql = "SELECT " + self.__field + " FROM " + self.tableif self.__join:sql += self.__joinif self.__where:sql += self.__whereif self.__order:sql += self.__orderif self.__limit:sql += self.__limitif self.__sql:return sql# 使⽤ execute() ⽅法执⾏ SQL 查询self.cursor.execute(sql)# 使⽤ fetchall() ⽅法获取所有数据.data = self.cursor.fetchall()return data'''DROP TABLE IF EXISTS `people`;CREATE TABLE `people` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名字',`sex` varchar(7) DEFAULT '' COMMENT '性别',`job` varchar(6) DEFAULT '' COMMENT '⼯作',`age` varchar(6) DEFAULT '' COMMENT '年龄',`height` varchar(6) DEFAULT '' COMMENT '⾝⾼',`weight` varchar(6) DEFAULT '' COMMENT '体重',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;INSERT INTO `people` VALUES ('1', '赵⼀', '男', '学⽣', '8', '120', '35');INSERT INTO `people` VALUES ('2', '钱⼆', '⼥', '学⽣', '9', '111', '31');INSERT INTO `people` VALUES ('3', '孙三', '男', '学⽣', '10', '123', '34');INSERT INTO `people` VALUES ('4', '李四', '⼥', '学⽣', '11', '100', '30');'''db = DB('people')# 增加dict = {'name': '周五', 'sex': '男', 'job': '学⽣', 'age': '8', 'height': '121', 'weight': '32'}data = db.insert(dict)print(data)# 删除# data = db.where('id=6').delete()# print(data)# 修改# dict = {'age': '9', 'height': '121', 'weight': '31'}# data = db.where('id=7').update(dict)# print(data)# 查询优化where条件 'id<11'# data = db.field('id,name,age,job').where([['id', '>', 1]]).order('id desc').limit('3').select()# print(data)补充知识:python DB API cursor 常⽤接⼝1. description如果 cursor 执⾏了查询的 sql 代码。

python操作mysql进行更新的时候,必须有commit

python操作mysql进行更新的时候,必须有commit

python操作mysql进⾏更新的时候,必须有commit今天在写python操作mysql的时候,出现了⼀个奇怪的现象,在⽤python代码执⾏update的时候,代码返回已经更新成功,但是数据库表⾥的字段的值却没有改变,⼀直没有找到错误的原因,结果寻求⾝边同事的帮助,问题解决,在此做个记录;MysqlHelper.py 代码如下#! /usr/bin/python# -*- coding: utf-8 -*-HOST = '127.0.0.1'PORT = 3306USER = 'test'PASSWORD = 'test123'DBNAME = 'test'CHARSET = 'utf8'def connect():try:import MySQLdbexcept ImportError, e:#print ereturn Nonetry:cxn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD,port=PORT,db=DBNAME,charset=CHARSET)#print cxnreturn cxnexcept MySQLdb.Error,e:print "Mysql Error %d: %s" % (e.args[0], e.args[1])# 插⼊操作def insert_one(cur,sql,value):res = cur.execute(sql ,value)# 插⼊成功,res 返回值为1if 1 != res :print 'failed'else:print 'success'def insert_many(cur,sql,values):res = cur.executemany(sql ,values)# 插⼊成功,res 返回值为1if 1 != res :print 'failed'else:print 'success'getRC = lambda cur: cur.rowcount if hasattr(cur,'rowcount') else -1# 更新操作def update(cur,sql,params):cur.execute(sql , params)return getRC(cur)# 删除操作def delete(cur,sql,params):cur.execute(sql,params)return getRC(cur)# 只获取⼀条记录,返回的是⼀个元组def fetch_one(cur,sql):count = cur.execute(sql)#print countresult = cur.fetchone();return result# 获取多条数据;返回的是⼆维元组;def fetch_all(cur,sql):count = cur.execute(sql)#print countresults = cur.fetchall();'''print resultsfor r in results:print r'''return results# 提交的完成操作def finish(cxn):mit()cxn.close()我在其它的⽂件中调⽤a.pyimport MysqlHelper# 获取数据库各个表的主键def getTablePrimaryKey(tablename):cxn = MysqlHelper.connect()cur = cxn.cursor()res = MysqlHelper.update(cur,"UPDATE table_primary_index "+"SET index_primary_value=index_primary_value+1"+" WHERE index_table_name =%s" , (tablename))print resresult = MysqlHelper.fetch_one(cur,"SELECT * FROM table_primary_index WHERE index_table_name='%s'" % tablename)print result现象: print res 可以正确返回1,说明更新数据库成功;print result 也可以取到刚刚更新的值;但是数据库表中的值没有变更;原因:python 操作mysql 是⽤事物的⽅式来实现的,所以在update 的时候必须有commit 提交的过程,否则数据表不会⽣效;修改后的代码如下:b.py# 获取数据库各个表的主键def getTablePrimaryKey(tablename):cxn = MysqlHelper.connect()cur = cxn.cursor()res = MysqlHelper.update(cur,"UPDATE table_primary_index "+"SET index_primary_value=index_primary_value+1"+" WHERE index_table_name =%s" , (tablename))print resresult = MysqlHelper.fetch_one(cur,"SELECT * FROM table_primary_index WHERE index_table_name='%s'" % tablename)print resultMysqlHelper.finish(cxn)return result[1]。

python mysql 查询的工具类方法

python mysql 查询的工具类方法

python mysql 查询的工具类方法Python是一种高级编程语言,它提供了丰富的库和工具来帮助程序员轻松地连接和处理数据库。

其中,与MySQL数据库交互的库非常流行,比如MySQLdb、PyMySQL等。

为了更加方便地进行MySQL查询操作,我们可以封装一个工具类方法,来简化代码的编写和维护。

以下是一个Python MySQL查询工具类方法的示例:```import MySQLdbclass MySQLHelper(object):def __init__(self, host, port, user, password, db):self.host = hostself.port = porter = userself.password = passwordself.db = dbdef execute(self, sql, params=None):conn = MySQLdb.connect(host=self.host, port=self.port, user=er, password=self.password, db=self.db)cursor = conn.cursor()if params:cursor.execute(sql, params)else:cursor.execute(sql)result = cursor.fetchall()mit()cursor.close()conn.close()return result```上述代码中,我们定义了一个MySQLHelper类,它包含了数据库连接的参数(host、port、user、password、db),以及一个execute 方法,用于执行SQL查询语句并返回结果。

在execute方法中,我们首先创建了一个MySQL连接对象,然后创建一个游标对象,利用游标对象来执行SQL语句。

如果查询语句中包含参数,则需要将参数传递给execute方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

python下的MySQLdb使用
下载安装MySQLdb
<1>linux版本
/projects/mysql-python/ 下载,在安装是要先安装setuptools,然后在下载文件目录下,修改mysite.cfg,指定本地mysql的mysql-config文件的路径
<2>windows版本
网上搜索到一个
/files/MySQL-python-1.2.2.win32-py2.6.exe 安装后import MySQLdb会出现 DeprecationWarning: the sets module is deprecated 这样一个警告,google之
原因是2.6不知sets这个模块,不过已经添加了set内置函数。

找到MySQLdb 文件夹的中__init__.py,注释掉from sets import ImmutableSet class DBAPISet(ImmutableSet):添加class DBAPISet(frozenset):;找到converters.py注释掉from sets import BaseSet, Set。

然后修改第45行和129行中的Set为set。

搞定。

下面开始操作的demo:
Python代码
1.# -*- coding: utf-8 -*-
2.#mysqldb
3.import time, MySQLdb
4.
5.#连接
6.conn=MySQLdb.connect(host="localhost",user="root",passwd="",db=
"test",charset="utf8")
7.cursor = conn.cursor()
8.
9.#写入
10.sql = "insert into user(name,created) values(%s,%s)"
11.param = ("aaa",int(time.time()))
12.n = cursor.execute(sql,param)
13.print n
14.
15.#更新
16.sql = "update user set name=%s where id=3"
17.param = ("bbb")
18.n = cursor.execute(sql,param)
19.print n
20.
21.#查询
22.n = cursor.execute("select * from user")
23.for row in cursor.fetchall():
24. for r in row:
25. print r
26.
27.#删除
28.sql = "delete from user where name=%s"
29.param =("aaa")
30.n = cursor.execute(sql,param)
31.print n
32.cursor.close()
33.
34.#关闭
35.conn.close()
基本的使用如上,还是很简单的,进一步使用还没操作,先从网上找点资料放上来,以备后续查看
1.引入MySQLdb库
import MySQLdb
2.和数据库建立连接
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="myt able",charset="utf8")
提供的connect方法用来和数据库建立连接,接收数个参数,返回连接对象.
比较常用的参数包括
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
charset:数据库编码.
更多关于参数的信息可以查这里
/MySQLdb.html
然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚
3.执行sql语句和接收返回值
cursor=conn.cursor()
n=cursor.execute(sql,param)
首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.这些方法包括两大类:1.执行命令,2.接收返回值
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果
mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.
下面的代码是一个完整的例子.
#使用sql语句,这里要接收的参数都用%s占位符.要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s
sql="insert into cdinfo values(%s,%s,%s,%s,%s)"
#param应该为tuple或者list
param=(title,singer,imgurl,url,alpha)
#执行,如果成功,n的值为1
n=cursor.execute(sql,param)
#再来执行一个查询的操作
cursor.execute("select * from cdinfo")
#我们使用了fetchall这个方法.这样,cds里保存的将会是查询返回的全部结果.每条结果都是一个tuple类型的数据,这些tuple组成了一个tuple
cds=cursor.fetchall()
#因为是tuple,所以可以这样使用结果集
print cds[0][3]
#或者直接显示出来,看看结果集的真实样子
print cds
#如果需要批量的插入数据,就这样做
sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"
#每个值的集合为一个tuple,整个参数集组成一个tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,a lpha2))
#使用executemany方法来批量的插入数据.这真是一个很酷的方法!
n=cursor.executemany(sql,param)
4.关闭数据库连接
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()
四步完成,基本的数据库操作就是这样了.下面是两个有用的连接
MySQLdb用户指南: /MySQLdb.html MySQLdb文
档: /MySQLdb-1.2.2/public/MySQLdb-module.html
5 编码(防止乱码)
需要注意的点:
1 Python文件设置编码utf-8 (文件前面加上#encoding=utf-8)
2 MySQL数据库charset=utf-8
3 Python连接MySQL是加上参数charset=utf8
4 设置Python的默认编码为utf-8 (sys.setdefaultencoding(utf-8)
1.#encoding=utf-8
2. import sys
3. import MySQLdb
4.
5. reload(sys)
6. sys.setdefaultencoding('utf-8')
7.
8. db=MySQLdb.connect(user='root',charset='utf8')
注:MySQL的配置文件设置也必须配置成utf8
设置 MySQL 的 f 文件,在 [client]/[mysqld]部分都设置默认的字符集(通常在/etc/mysql/f):
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8。

相关文档
最新文档