通过pymysql中的connect()类创建Python与MySQL之间的连接

要使用pymysql模块在Python和MySQL数据库之间建立连接,首先需要通过命令行安装pymysql:pipinstallpymysql接下来,导入pymysql模块并创建连接:importpymysqlconn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',database='nocturneshop')创建一个游标对象来执行SQL操作:cur=conn。
Cursor()定义并执行SQL查询来检索品牌信息:SQL="SELECT*FROMbrand;"ret=cur.execute(SQL)print(f"该查询总共检索{ret}条信息")得到结果查询:data=cur.fetchone()print(data)data=cur.fetchmany(4)print(data)data_set=cur.fetchall()print(data_set)关闭游标和结束连接器:cur.close()conn.close()

python怎么连接mysql数据库

1.与数据库建立连接2.执行sql语句并接收返回值3.关闭数据库连接1.MySQL数据库需要MySQLdb模块,但Python链接MySQL使用的MySQLdb第三方库不需要不支持Python3.x特别说明:我在我的电脑上实验时,我的python版本是2.7.2安装了对应版本的MySQLdb后,可以直接运行并成功连接数据库所以如果大家都成功了我,你不需要看下面的内容,直接跳过,看看第2点的sql语句是如何执行的!如果安装后出现异常,可以参考以下解决方法。
连接的关键是在安装MySQLdb模块时下载对应版本的Python:下载安装后会自动检测你电脑上的Python安装路径,并自动填写模块的解压路径(我的是:D:\ProgramFiles\ActivePython2.6.6.17\Lib\site-packages\)。
但解压完成后无法使用,需要修改MySQLdb模块下的一些文件:①在MySQLdb目录中找到_(我的是:D:\ProgramFiles\ActivePython2.6.6.17\Lib\site-packages.\MySQLdb)_init__.py:添加了第34行和第35行ImmutableSet、classDBAPISet(ImmutableSet):的注释classDBAPISet(frozenset):#fromsetsimportImmutableSet#classDBAPISet(ImmutableSet):classDBAPISet(frozenset):②.打开converters.py:注释掉第37行的setsimportBaseSet、Set,将第45行returnSet([iforiins.split(',')ifi])中的Set也改为set;:Set2Str,将Set改为set(不要修改Set2Str),修改到这里完成2.创建数据库连接importMySQLdbconn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")比较常用的参数有host:连接的数据库服务器主机名,默认是localhost。
user:数据库登录名是当前user:数据库登录密码为空默认服务是3306。
连接扩展有两个重要的方法是commit[提交新的添加和修改]和retract[撤销新的添加或修改]3.执行数据库操作n=cursor.execute(sql,param)我们需要使用连接对象来获取游标对象接下来我们将使用游标提供的方法来进行工作这些方法主要包括两大类:1.执行命令,2.接收return值游标执行命令所使用的方法:callproc(self,procname,args):用于执行存储过程接受的参数是存储过程的名称和参数列表返回值是受影响的个数rows(self,query,args):执行单个sql语句本身以及使用的参数列表,返回值是受影响的行数executemany(self,query,args):执行单个sql语句,但是它是重复执行参数列表中的参数,返回值为执行的行数受影响的(self):移动到下一个结果集游标接收返回值所使用的方法:fetchall(self)。
:接受所有返回的结果行(self,size=None):接受大小条,如果size值大于return则返回结果行结果行数将返回cursor.arraysize条数据fetchone(self):返回oneresultrow(self,value,mode='relative'):将指针移动到特定行',这意味着将值栏从当前行移动,如果mode='absolute'则意味着将值栏从第一行移动结果集的以下代码是完整的示例#使用sql语句,这里接受的参数使用要插入的数据中的占位符%sAlwaysuse%ssql="insertintocdinfovalues(%s,%s,%s,%s,%s)"asplaceholder#paramshould为tuple或listparam=(title,singer,imgurl,url,alpha)#执行,如果成功,n值为1n=cursor.execute(sql,param)#则执行查询操作cursor.execute("select*frominfo")#我们这样使用fetchall方法,cd中存储的将是查询返回的所有结果每个结果都是tuple类型数据,这个tuple就形成tuplecds=cursor.fetchall()#因为它是。
tuple,所以可以使用结果集printcds[0][3]#或者直接显示,看看结果集实际是什么样子printcds#如果需要批量插入数据,就这样做sql="insertintocdinfovalues(0,%s,%s,%s,%s,%s)"#每个值的集合是一个元组,整个参数集合组成一个元组,或者listparam=((title,singer,imgurl,url,阿尔法),(标题2,singer2,imgurl2,url2,alpha2))#使用executemany方法批量插入数据这是一个很棒的方法n=cursor.executemany(sql,param)需要注意的是(或者我觉得奇怪的是。
),执行插入、删除或修改操作后,需要调用conn.commit()方法提交,这样数据才会真正保存到数据库中不知道是不是我mysql设置的问题,当我第一次使用它的时候这个,如果我不使用commit,数据将不会被保存在。
数据库。
不过数据库中的数据确实有同名方法cursor.close()conn.close()5、5编码(避免乱码)需要注意的地方:1Python文件设置编码utf-8(添加#encoding=文件前面的utf-8)2MySQL数据库charset=utf-83Python连接MySQL是添加参数charset=utf84设置Python默认编码为utf-8(sys.setdefaultencoding(utf-8)#encoding=utf-8importsysimportMySQLdbreload(sys)sys.setdefaultencoding('utf-8')db=MySQLdb.connect(user='root',charset='utf8')注意:MySQL配置文件设置It还必须配置为utf86。
功能演示module#!/usr/bin/pythonimportMySQLdbCon=MySQLdb.connect(host='localhost',user='root',passwd='root',db='abc')cursor=con.cursor()sql="select*frommyt"cursor.execute(sql)row=cursor.fetchone()printrowcursor.close()con.close()执行如下SQL语句获取返回值://获取cursor游标connected=conn.cursor()//查询sql="select*from[table]"//添加sql="insertinto[table](field,field)values(value,value)"//修改sql="update[table]setfield='value'wherecondition"//删除sql="deletefrom[table]wherecondition"cursor.execute(sql)返回值cur.execute('select*fromtables')返回值是条数通过SQL语句获取的行,如:2L,显示2条线。
然后可以从对象的fetchone或fetchall方法获取行信息。
获取行信息指针对象的fetchone()方法是每次获取一行的元组返回值:参考>>>row=cur.fetchone()>>>printrow('user1','52c69e3a57331081823331c4e69d3f2e',1000L,1000L,'/home/FTP/user1','')指针对象的fetchall()方法可以获取所有行指针结果集中,返回的结果集是一个元组:参考>>>cur.scroll(0,'absolute')>>>row=cur.fetchall()>>>printrow(('user1','52c69e3a57331081823331c4e69d3f2e',1000L,1000L,'/home/FTP/user1',''),('user2','7e58d63b60197ceb55a1c487989a3720',1000L,1000L,'/home/FTP/user2',None))移动指针当使用fetchone()方法时,指针会移动。
因此,如果指针没有重置,则该信息使用fetchall将只包含指针后面的行的内容。
手动移动指针,使用:cur.scroll(int,parm),意思是:引用int:滚动的行数,相对模式下的整数,正数表示向下移动,负值表示向上移动。
parm:移动模式,默认为相对模式,也可以接受绝对模式。
修改数据修改数据,包括插入、更新和删除。
所有这些都是使用指针对象的execute()方法执行的:cur.execute("insertintotable(row1,row2)values('111','222')")cur.execute("updatetablesetrow1='test'whererow2='row2'")cur.execute("deletefromtablewhererow1='row1'")由于SQL语句中使用单引号“'”进行标识,所以python中的字符串需要直接用双引号括起来。
另外,还可以使用python的“格式化字符串”写法来简化命令,例如:cur.execute("updatetablesetrow1='%s'whererow2='%s'"%('value1','value2'))※请注意,单引号'%s'是SQL语句分隔符,单引号'value1'是python的字符串分隔符。
无论是否需要分隔符,含义都是不同的。
使用双引号还是单引号作为间隔取决于含义比如还有:cur.execute("updateFTPUERSsetpasswd=%swhereuserid='%s'"%("md5('123')",'user2'))这里paswd=%s是因为SQL的md5()函数不需要单引号"md5('123')"表示Python字符串包含单引号,所以用双引号括起来;标记Live模块会自动提交修改,但是我们更新数据后,我们手动运行:conn.commit()需要分别关闭指针对象和连接对象来关闭数据库连接他们有一个方法相同名称光标。
关闭()conn.close()