MySQL-python模块的基本使用

本文详细介绍了使用MySQL-python进行数据库操作的基本流程,包括如何创建连接、执行增删查改操作以及事务管理。通过实例演示了如何执行SQL插入、删除、更新和查询操作,并解释了如何使用游标和执行函数来处理可变数据和一次插入多行数据的问题。同时,文章还介绍了如何将操作提交给数据库,以及如何正确关闭游标和连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是导入该模块:

>>>importMySQLdb

然后是创建与数据库的连接:

>>>conn= MySQLdb.connect('localhost','root','passwd')

(在这条命令里,localhost是指连接本地的数据库,root是指连接数据库中的root用户,passwd是该用户的密码。)

接着是创建游标

>>>cur= conn.cursor()#创建游标是用来使用SQL指令

>>>conn.select('python_test')#选择连接的数据库,该语句是连接了一个名为python_test的数据库

好,前期准备已经ok了,现在开始看看如何使用MySQL-python来进行数据库的增删查改


(在此之前,先爱心提醒一下,若以下命令要用到引号,记得最好最外面的用双引号,里面的用单引号,不然会引发“引号问题”的。如:”Ilike 'King'”和‘Ilike 'King'’python来说是不一样的哦~~~)

1.

#一次插入一行数据

>>>cur.execute("insertinto表名(属性名1,属性名2,...)value('1,2,...')")

该语句有两个缺点,第一是属性值被固定了,意思是要输入值得把语句从头打一遍,第二是一次只能输入一行数据,面对有多行数据的输入就显得很麻烦,接下来,我们一步步解决这两个问题:

#可变数据的插入

>>>sqli= "insert into表名(属性名1,属性名2,...)value(%s,%s,...)"

>>>cur.execute(sqli,('1','2',...))

#一次插入多个数据

>>>sqlim= "insert into表名(属性名1,属性名2,...)values(%s,%s,...)"#插入多个数据

>>>cur.executemany(sqlim,[('11','12',...),('21','22',...),('31','32',...),...])


如上语句,将SQL语言对象赋给一个变量,然后再使用execute()函数,函数第一个参数是SQL语言对象,第二个为参数是一个元组,元组内为属性对应的值,这样就可以实现可变数据的插入;

进一步,在定义SQL语言对象时,把value改为values,再使用executemany()函数,该函数第一个参数仍然是SQL语言对象,第二个参数是一个列表,列表内是多个元组,元组内是对应的属性值,这样就可以实现一次插入多个值。


2.&

类似增加的操作,删和改也是用相同的方法,使用execute()函数处理相应的SQL语句即可:

>>>cur.execute('deletefrom student where id=3')

>>>cur.execute("updatestudent set name='aa' where id='3'")

(注:student为表名)

3.

相对于增,删和改,查会麻烦一点,因为前者都可以用一句命令完成,而查这个动作一般得两句命令,这是因为在MySQL里,select语句可以把表打印出来,但是在python里是无法将表打印出来的。

首先使用第一条命令,用于查询该表有多少条记录:

>>>cur.execute("select * from student")

然后可以使用fetchone命令对表内记录逐条查询

>>>cur.fetchone()#出来一条

>>>cur.fetchone()#出来下一条

该命令的缺陷在于像存在一个无形的指针一样,你只能一直往下查,不能回头,而且到底(最后一条记录)之后就不能再继续查询了。

此时我们可以用以下命令将那个无形的指针移动:

>>>cur.scroll(移动多少,'移动位置')

该函数的第一个参数是移动位数,第二个参数是指将那个无形的指针安置的位置,如scoll(0,absolute),就是指把无形指针安置到开头第一个位置,然后往下移动0位。(关于该函数我知道的不多,有兴趣的读者可自行百度)


以上并没有解决一次取一行的缺陷,而我们用以下函数一下取多行:

>>>cur.fetchmany(15)

其中15是指取15条记录。

所以对于SQL语句select* from student,在python里我们用cur.fetchmany(cur.execute("setlect * from table.name"))可达到同样效果。


到这里,你已经把增删查改的基本操作都学了,但是事情还没有完,你得把你对数据库的操作传给数据库,数据库才会按你的命令对自己进行改造,此时你的输入:
>>>conn.commit()

commit命令用于把事务所做的修改保存到数据库。

(注:commit()MySQL的存储引擎对事务的支持有关。原来MySQL中有多种类型的存储引擎,例如:MyISAMInnoDB等。MyISAM不支持事务处理,而InnoDB是事务型数据库,支持事务。  有的人安装的MySQL的默认存储引擎就是InnoDB,所以对数据库数据的操作会在事先分配的缓存中进行,只有在commit之后,数据库的数据才会改变。更多参考可见链接:http://www.cnblogs.com/KarryWang/p/3225551.html)

最后的最后,关闭游标和连接,不要忽视每一个细节~~~

>>>cur.close()#先关游标

>>>conn.close()#后关连接

下面给出参考代码:

import MySQLdb
conn = MySQLdb.connect('localhost','root','danger')
cur = conn.cursor()
conn.select_db('python_test')
cur.execute("insert into student(id,name,class,age) value(91,'Z','SSS',19)")
sqli = "insert into student(id,name,class,age) value(%s,%s,%s,%s)"
cur.execute(sqli,(92,'Y','SSS',29))
sqlim = "insert into student(id,name,class,age) values(%s,%s,%s,%s)"
cur.executemany(sqlim,[(81,'Mike','s',11),(82,'Egg','s',12),(83,'Apple','s',13)])
cur.execute("delete from student where name='Tom'")
cur.execute("update student set id=99 where name='Z'")
cur.execute("select * from student")
a1 =cur.fetchone()
a2 =cur.fetchone()
cur.scroll(0,'absolute')
a3 =cur.fetchone()
a4 =cur.fetchmany(5)
a5 = cur.fetchmany(cur.execute("select * from student"))
s=[a1,a2,a3,a4,a5]
for i in range(0,5):
	print s[i]
conn.commit()
cur.close()
conn.close()

代码最后结果验证:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值