首先是导入该模块:

>>>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中有多种类型的存储引擎,例如:MyISAM,InnoDB等。MyISAM不支持事务处理,而InnoDB是事务型数据库,支持事务。  有的人安装的MySQL的默认存储引擎就是InnoDB,所以对数据库数据的操作会在事先分配的缓存中进行,只有在commit之后,数据库的数据才会改变。)

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

>>>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()

代码最后结果验证:

使用Python脚本提权成root用户 python中root用法_mysql

使用Python脚本提权成root用户 python中root用法_python_02