python 操作mysql
1.加载数据库模块 MySQLdb 在python2.7上使用, 3.0使用pymysql
---import MySQLdb
2.连接数据库mysql系统
---db = MySQLdb.connect("localhost","root","123456" , charset='utf8')
---db = MySQLdb.connect("127.0.0.1","root","123456", charset='utf8' )
如果执行localhost时连接失败,而127.0.0.1成功。
可以修改hosts文件, 将
# 127.0.0.1 localhost 前面的 #去掉既可
3.连上mysql,并选择进入某个数据库
---db = MySQLdb.connect("localhost","root","123456" , db='userdata',charset='utf8')
---db = MySQLdb.connect("127.0.0.1","root","123456", db='userdata',charset='utf8' )
或:
---cursor = db.cursor()
---cursor.execute("""use userdata""")
4.读取数据表login
---effect_row_count = cursor.execute('select * from login')
effect_row_count为返回的数据行数
4.1取一条数据:
---one_line_list = cursor.fetchone()
返回的是一行数据组成的元祖(,,...),可以通过下标访问每一列one_line_list[0],one_line_list[1]
4.2取所有的数据:
---all_line_list = cursor.fetchall()
返回的是((),(),()...)
4.3获取前n行数据:
---n_line_list = cursor.fetchmany()
5.插入数据
5.1插入一条
---sql = "insert into login(Name,passwod) values(%s,%s)%("zhangsan","123")"
---cursor.execute(sql)
5.2插入多条
---data = [("zhangsan","123"),("lisi","123"),]
---sql = "insert into login(Name,passwod) values(%s,%s),data"
---cursor.executemany(sql)
5.3要想SQL语句执行成功,还要提交:
--- db.commit()
6.判断数据库中是否存在表login
ret = self.cursor.execute("show tables")
results = self.cursor.fetchall()
for r in results:
if 'login' in r
print u'login表已经存在'
else:
print u'login表不存在’
7.数据库的备份
例如:将数据库userdata复制到backup_dir_name,此为全路径加文件名如:backup_dir_name = c:/backup_dir/back.sql
try:
os.system("mysqldump -uroot -p%s userdata > %s" % (key,backup_dir_name))
self.progressBar.setValue(100)
self.label_tip.setText(u'备份完成')
my_warning = QtGui.QMessageBox.information(self, u"提示", u"备份数据成功!",1, 0)
except:
my_warning = QtGui.QMessageBox.warning(self, u"提示", u"备份数据库失败!",1, 0)
self.label_tip.setText(u'备份失败')
7.数据库的恢复
恢复数据库要先存在userdata,不存在则先创建再恢复,初始内容为空即可
7.1.先检查userdata是否存在:
ret = cursor.execute("""create database if not exists userdata default character set utf8 collate utf8_unicode_ci """)
7.2.执行恢复:
recover_file = 是上次备份的文件全路径名
try:
key = u'123456'
os.system("mysql -uroot -p%s userdata < %s" % (key,recover_file))
self.progressBar.setValue(100)
self.label_tip.setText(u'恢复完成')
my_warning = QtGui.QMessageBox.information(self, u"提示", u"恢复数据成功!",1, 0)
except:
my_warning = QtGui.QMessageBox.warning(self, u"提示", u"恢复数据库失败!",1, 0)
self.label_tip.setText(u'恢复失败')
cursor.close()
db.close()