python下MySQLdb使用
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构成教务管理系统,提供系统管理员,教职⼯,学⽣三级。
有注册,添加,修改,发布信息等功能。
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连接数据库定义方法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 操作数据库的主要步骤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数据库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和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的使⽤如果使⽤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提供了多种文件传输的方法,下面是其中几种常用的方式: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语句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。