图片 1

Python操作MySQL数据库的三种方法,python操作数据库

 


(1) 什么是MySQLdb?

安装:pip3 install pymysql

 数据库编制程序

从日前大家领略数据库概念包涵数据库文件、服务器和数据库客商端
客商端我们后面曾经用过的有navicat/mysql-client等次第。

难题:
如何行使客商端将100000行数据插入到数据库?

大家会开掘只要用事情发生早先顾客端大约是非常小概完全这么些职分的,
因为大家不容许去组织出极其插入10w行数据的SQL。但是,假若大家有三个效果能够插入生机勃勃行数据,依赖程序强盛的脾性-重复,就足以稳操胜利的概率的就将10w行数据收入麾下。这种通过利用程序代码的格局去老是数据库服务器,通过和服务器实行人机联作实现对数据库的增加和删除改查的方法,就叫做数据库编制程序。

而此时学习的pymysql便是大器晚成种顾客端。


MySQLdb 是用来 Python 连接 MySQL 数据库的接口,它完成了 Python 数据库
API 标准 V2.0,基于 MySQL C API 上建立的。

引进模块在python3里:from pymysql import *

 Python 中操作 MySQL 步骤

什么样明白连接 connection 和 游标 cursor
connection就像是连接出发地和指标地的 高速度公路cursor就如在一级公路上的运货汽车-拉货 大家运用游标就可以形成对数码的操作
当我们做到操作达成后就足以告生机勃勃段落卡车,然后公路再结束使用。

(2卡塔尔(قطر‎ 源码安装 MySQLdb:

利用手续:

pymysql的使用

引进模块

from pymysql import connect

$
tar zxvf MySQL-python-*.tar.gz
$
cd MySQL-python-*
$
python setup.py build
$
python setup.py install 

Python能源分享群:484031800

Connection 对象

  • 用于创建与数据库的总是
    调用pymysql模块中的connect(卡塔尔方法

conn=connect(参数列表)

* 参数host:连接的mysql主机,如果本机是'localhost'
* 参数port:连接的mysql主机的端口,默认是3306
* 参数database:数据库的名称
* 参数user:连接的用户名
* 参数password:连接的密码
* 参数charset:通信采用的编码方式,推荐使用utf8
  • 闭馆连接 conn.close()

  • 交由数据 conn.commit()

  • 撤除数据 conn.rollback()

  • 因此延续获取游标
    cur = conn.cursor()重回Cursor对象,用于推行sql语句并赢得结果

(3) MySQLdb 的使用:

1、创立Connection对象,用于创立与数据库的总是,创制对象调用connect(卡塔尔(قطر‎方法conn=connect

Cursor游标对象

  • 获取Cursor对象

      # 调用Connection对象的cursor()方法    
      cur =conn.cursor()
    

目标:
实施sql语句(使用频度最高的语句为select、insert、update、delete卡塔尔国

  • 接受游标试行SQL语句

execute(operation [, parameters ])
实施SQL语句,重临受影响的行数,主要用来实行insert、update、delete语句,也得以实施create、alter、drop等语句

  • 关门游标 cur.close()

  • 赢得结果聚焦的一条

    cur.fetchone()归来二个元组 形如
    (1,’己妲’,18卡塔尔(英语:State of Qatar)

  • 获得结果聚集的具备

    cur.fetchall()实行查询时,获取结果集的持有行,豆蔻梢头行构成二个元组,再将这么些元组装入三个元组再次来到形如((1,’公孙离’,20卡塔尔(قطر‎,(2,’苏妲己’,18卡塔尔国卡塔尔(英语:State of Qatar)

#!/usr/bin/env
python
#
coding=utf-8

参数host:连接mysql的主机,若是本机就用localhost

pymysql完毕多少查询

import pymysql

# 创建和数据库服务器的连接 服务器地址   端口    用户名     密码  数据库名 通信使用字符和数据库字符集一致
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python_test_1', charset='utf8')

# 获取游标
cursor = conn.cursor()

# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = """select * from hero;"""

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 取出结果集中一行  返回的结果是一行 (1, '妲己', 2)
# print(cursor.fetchone())

# 取出结果集中的所有数据  返回 ((一行数据),(),())
# ((1, '妲己', 2), (2, '李白', 1), (3, '程咬金', 3), (4, '亚瑟', 5), (5, '荆轲', 99))
for line in cursor.fetchall():
    print(line)

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

import
MySQLdb

参数port:连接mysql的端口,默认是3306

pymysql实现对数据库的增加和删除改

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='mysql',db='python_test_1', charset='utf8')

# 通过连接获取游标
cursor = conn.cursor()


# sql = "delete from hero where id = 5;"
# sql = insert into hero (name) values ('西部大坏蛋孙悟空');
sql = "update hero set kongfuid=444 where id = 4;"

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 提交数据到数据库
# conn.commit()

# 回滚数据到什么都不做的状态 即撤销刚刚的修改
conn.rollback()

# 关闭游标和连接
cursor.close()
conn.close()

至于提交commit
commit将改善提交到数据库,保存纠正

style=”font-size: 14px”>注意pymysql中多少须要手动提交commit手艺保留到数据库中

def
connectdb():
 
  print(‘连接到mysql服务器…’)
 
  # 展开数据库连接
 
  # 客户名:p, 密码:12345.,客商名和密码须要改成你协和的mysql客户名和密码,而且要开创数据库TESTDB,并在TESTDB数据库中开创好表Student
 
  db =
MySQLdb.connect(“localhost”,”p”,”12345.”,”TESTDB”)
 
  print(‘连接上了!’)
 
  return db

参数database:数据库名称

参数化列表制止SQL注入

怎么是SQL注入 发生原因:
后台将顾客提交的隐含恶意的多寡和SQL实行字符串方式的拼接,进而影响了SQL语句的语义,最后发生多少外泄的情景。
假使幸免: sql语句的参数化,
将SQL语句的全体数据参数存在一个列表中传送给execute函数的第叁个参数

注意

* 此处不同于python的字符串格式化,必须全部使用%s占位
* 所有参数所需占位符外不需要加引号
from pymysql import connect

def main():

    find_name = input("请输入物品名称:")

    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor()


    # # 非安全的方式
    # # 输入 " or 1=1 or "   (双引号也要输入)
    # sql = 'select * from goods where name="%s"' % find_name
    # print("""sql===>%s<====""" % sql)
    # # 执行select语句,并返回受影响的行数:查询所有数据
    # count = cs1.execute(sql)

    # 安全的方式
    # 构造参数列表 
    params = [find_name]
    # 执行select语句,并返回受影响的行数:查询所有数据
    count = cs1.execute('select * from goods where name=%s', params)
    # 注意:
    # 如果要是有多个参数,需要进行参数化
    # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可 

    # 打印受影响的行数
    print(count)
    # 获取查询的结果
    # result = cs1.fetchone()
    result = cs1.fetchall()
    # 打印查询的结果
    print(result)
    # 关闭Cursor对象
    cs1.close()
    # 关闭Connection对象
    conn.close()

if __name__ == '__main__':
    main()

def
createtable(db):
 
  # 使用cursor(卡塔尔(قطر‎方法得到操作游标 
 
  cursor = db.cursor()
 
  # 假如存在表Sutdent先删除
 
  cursor.execute(“DROP TABLE IF EXISTS
Student”)
 
  sql = “””CREATE TABLE Student (
 
          ID CHAR(10) NOT NULL,
 
          Name CHAR(8),
 
          Grade INT )”””
 
  # 创建Sutdent表
 
  cursor.execute(sql)

参数user:连接的客户名

def
insertdb(db):
 
  # 使用cursor(卡塔尔国方法赢得操作游标 
 
  cursor = db.cursor()
 
  # SQL 插入语句
 
  sql = “””INSERT INTO Student
 
       VALUES (‘001’, ‘CZQ’, 70),
 
              (‘002’, ‘LHQ’, 80),
 
              (‘003’, ‘MQ’, 90),
 
              (‘004’, ‘WH’, 80),
 
              (‘005’, ‘HP’, 70),
 
              (‘006’, ‘YF’, 66),
 
              (‘007’, ‘TEST’, 100)”””

参数password:连接的密码

 
  #sql = “INSERT INTO Student(ID, Name, Grade)
 
  #    VALUES (‘%s’, ‘%s’, ‘%d’)” %
 
  #    (‘001’, ‘HP’, 60)
 
  try:
 
      # 执行sql语句
 
      cursor.execute(sql)
 
      # 提交到数据库实施
 
      db.commit()
 
  except:
 
      # Rollback in case there is any error
 
      print ‘插入数据失利!’
 
      db.rollback()

参数charset:通讯接纳的编码格局,私下认可是utf-8

def
querydb(db):
 
  # 使用cursor(卡塔尔方法得到操作游标 
 
  cursor = db.cursor()
 
  # SQL 查询语句
 
  #sql = “SELECT * FROM Student
 
  #    WHERE Grade > ‘%d'” % (80)
 
  sql = “SELECT * FROM Student”
 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 获取具备记录列表
 
      results = cursor.fetchall()
 
      for row in results:
 
          ID = row[0]
 
          Name = row[1]
 
          Grade = row[2]
 
          # 打印结果
 
          print “ID: %s, Name: %s, Grade: %d” %
 
              (ID, Name, Grade)
 
  except:
 
      print “Error: unable to fecth data”

2、对象的办法

def
deletedb(db):
 
  # 使用cursor(卡塔尔国方法获得操作游标 
 
  cursor = db.cursor()
 
 # SQL 删除语句
 
  sql = “DELETE FROM Student WHERE Grade = ‘%d'” % (100)

close() 关闭

 
  try:
 
     # 执行SQL语句
 
     cursor.execute(sql)
 
     # 提交修改
 
     db.commit()
 
  except:
 
      print ‘删除数据战败!’
 
      # 产生错误时回滚
 
      db.rollback()

commit() 提交

def
updatedb(db):
 
  # 使用cursor(卡塔尔(قطر‎方法获得操作游标 
 
  cursor = db.cursor()
 
  # SQL 更新语句
 
  sql = “UPDATE Student SET Grade = Grade + 3 WHERE ID = ‘%s'” %
(‘003’)
 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 提交到数据库推行
 
      db.commit()
 
  except:
 
      print ‘更新数据退步!’
 
      # 产生错误时回滚
 
      db.rollback()
def
closedb(db):
 
  db.close()

cursor(卡塔尔(英语:State of Qatar) 再次回到Cursor对象,用于施行sql语句并赢得结果

def
main():
 
  db = connectdb()    # 连接MySQL数据库

execute(operation,[,parameters])实践语句,重回受影响的函数,主要用来实践insert,update,delete语句,也可用以奉行create,alter,drop等

 
  createtable(db)     # 创建表
 
  insertdb(db)        # 插入数据
 
  print ‘n插入数据后:’
 
  querydb(db) 
 
  deletedb(db)        # 删除数据
 
  print ‘n删除数据后:’
 
  querydb(db)
 
  updatedb(db)        # 更新数据
 
  print ‘n更新数据后:’
 
  querydb(db)

fetchone(卡塔尔(英语:State of Qatar) 试行查询语句时,获取查询结果集的第风姿罗曼蒂克行数据,重回叁个元祖

 
  closedb(db)         # 关闭数据库

fetchall(卡塔尔试行查询时,获取结果集的全体行数,大器晚成行构成三个元祖,再讲那个元组装贰个元组重回

if
__name__ == ‘__main__’:
 
  main()

fetchmany 实施查询时,要取的数据条数,n为要取的条数

#!/usr/bin/env
python
import
MySQLdb  
 
 
try:
 
 
 conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,db=’test’,port=3306)  
 
  cur=conn.cursor()  
 
  cur.execute(‘select user,password from
user’)  
 
  cur.close()  
 
  conn.close()  
except
MySQLdb.Error,e:  
 
   print “Mysql Error %d: %s” % (e.args[0], e.args[1])   

Cursor对象

#!/usr/bin/env
python  
#_*_
coding:utf-8 _*_  
  
import
MySQLdb  
  
  
try:
 
 
  conn =MySQLdb.Connect(host=’192.168.8.40′,user=’root’,passwd=’root’,db=’mysql’,port=3306)  
 
    
 
  cur = conn.cursor()  
 
  rs = cur.execute(‘select user,password,host from user’)  
 
  rs = cur.execute(‘create database if not exists python’)  
 
  conn.select_db(‘python’)  
 
    
 
  cur.execute(‘create table test(id int,info
varchar(30))’)   
 
    
 
  value = [1,’hi jack’]  
 
    
 
  cur.execute(‘insert into test values(%s,%s)’,value)  
 
    
 
  values = []  
 
  for i in range(20):  
 
      values.append((i,’hi jack’ + str(i)))  
 
        
 
  cur.executemany(‘insert into test values(%s,%s)’,values)  
 
    
 
  cur.execute(‘update test set info=”i am jack” where id=3’)  
 
    
 
  conn.commit()  
 
  cur.close()  
 
  conn.close()  
except
MySQLdb.Error,e:  
 
  print ‘mysql error msg: %d,%s’ % (e.args[0],e.args[1])   

效果与利益:用于施行sql语句,常用的是增加和删除改查,获取cursor对象,调用Connection对象的cursor(卡塔尔(英语:State of Qatar)方法cs=conn.cursor(卡塔尔国

import
MySQLdb  
    
try:
 
 
  conn =MySQLdb.Connect(host=’192.168.8.40′,user=’root’,passwd=’root’,db=’mysql’,port=3306,charset=’utf8′)  
 
    
 
  cur = conn.cursor()  
 
    
 
  conn.select_db(‘python’)  
 
    
 
  count = cur.execute(‘select * from test’)   
 
    
 
  print ‘there has %s rows record’ % count  
 
    
 
  result = cur.fetchone()  
 
  print result  
 
  print ‘id: %s info %s’ % result  
 
    
 
  result2 = cur.fetchmany(3)  
 
  for record in result2:  
 
      print record  
 
        
 
  print ‘==’*10  
 
  cur.scroll(0,mode=’absolute’)  
 
    
 
  result3 = cur.fetchall()  
 
  for record in result3:  
 
      print record[0] ,’—‘,record[1]  
 
    
 
  conn.commit()  
 
  cur.close()  
 
  conn.close()  
except
MySQLdb.Error,e:  
 
  print ‘mysql error msg: %d,%s’ % (e.args[0],e.args[1]) 

目的的属性

询问后中文会显示乱码,但在数据库中却是平常的,开掘用八性格能有可化解:

rowcount 只读属性,表示近期一回execute(卡塔尔(قطر‎施行受影响的行数

在Python代码 

connection 拿到当前接连对象from pymysql import *

conn
= MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’,
db=’python’卡塔尔(英语:State of Qatar) 中加一个天性:
 改为:
conn
= MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’,
db=’python’,charset=’utf8′) 
charset是要跟你数据库的编码同样,若是是数据库是gb2312
,则写charset=’gb2312’。 

def main():

接下来,那几个三番五次对象也提供了对业务操作的扶植,规范的方法
commit()
提交
rollback()
回滚

# 应当要有定位的:创立connection连接

cursor用来实行命令的章程:
callproc(self,
procname,
args卡塔尔(قطر‎:用来进行存款和储蓄进程,选择的参数为存款和储蓄进程名和参数列表,重返值为受影响的行数
execute(self,
query,
args卡塔尔国:推行单条sql语句,选用的参数为sql语句作者和动用的参数列表,重返值为受影响的行数
executemany(self,
query,
args卡塔尔(قطر‎:试行单挑sql语句,不过再度实践参数列表里的参数,重回值为受影响的行数
nextset(self卡塔尔:移动到下三个结实集

conn = connect(host=’locahost’, port=3306, database=’test’, user=’test’,
password=’123456′, charset=’utf8′)

cursor用来选择再次回到值的章程:
fetchall(self卡塔尔国:采纳全体的归来结果行.
fetchmany(self,
size=None卡塔尔(قطر‎:选用size条回来结果行.即便size的值超过重返的结果行的数额,则会回去cursor.arraysize条数据.
fetchone(self卡塔尔(قطر‎:再次来到一条结果行.
scroll(self,
value,
mode=’relative’卡塔尔国:移动指针到某生机勃勃行.若是mode=’relative’,则表示从今以后时此刻所在行活动value条,如果mode=’absolute’,则象征从结果集的率先行活动value条.

# 应当要有一定的:获取Cursor对象

  1. PyMySQL 的使用

cs = conn.cursor()

(1)
什么是 PyMySQL?

# 施行select语句,并赶回查询的结果条数


PyMySQL 是 Python 中用来连接 MySQL 服务器的叁个库,它死守 Python 数据库
API 规范 V2.0,并带有了 pure-Python MySQL 客商端库。

count = cs.execute

(2)
安装 PyMysql:

# 打字与印刷重回的查询结果行数

pip
install PyMysql

print(“查询到%d条数据:” % count)

(3)
使用 PyMySQL:

for i in range:

#!/usr/bin/env
python
#
coding=utf-8

# 获取查询结果,取风流洒脱行数据,仅重返几个元祖

import
pymysql

result = cs.fetchone()

def
connectdb():
 
  print(‘连接到mysql服务器…’)
 
  # 打开数据库连接
 
  # 客户名:p,
密码:12345.,客商名和密码需求改成你和谐的mysql客户名和密码,况兼要开创数据库TESTDB,并在TESTDB数据库中开创好表Student
 
  db =
pymysql.connect(“localhost”,”hp”,”Hp12345.”,”TESTDB”)
 
  print(‘连接上了!’)
 
  return db

# 打字与印刷查询构造

def
createtable(db):
 
  # 使用cursor(卡塔尔方法赢得操作游标 
 
  cursor = db.cursor()

print

 
  # 假使存在表Sutdent先删除
 
  cursor.execute(“DROP TABLE IF EXISTS Student”)
 
  sql = “””CREATE TABLE Student (
 
          ID CHAR(10) NOT NULL,
 
          Name CHAR(8),
 
          Grade INT )”””

“””

 
  # 创建Sutdent表
 
  cursor.execute(sql)

取多行数据

def
insertdb(db):
 
  # 使用cursor(卡塔尔(英语:State of Qatar)方法拿到操作游标 
 
  cursor = db.cursor()

result1=fetchmany

 
  # SQL 插入语句
 
  sql = “””INSERT INTO Student
 
       VALUES (‘001’, ‘CZQ’, 70),
 
              (‘002’, ‘LHQ’, 80),
 
              (‘003’, ‘MQ’, 90),
 
              (‘004’, ‘WH’, 80),
 
              (‘005’, ‘HP’, 70),
 
              (‘006’, ‘YF’, 66),
 
              (‘007’, ‘TEST’, 100)”””

result2=fetchall() # 重返的结果是元组里嵌元组

 
  #sql = “INSERT INTO Student(ID, Name, Grade)
 
  #    VALUES (‘%s’, ‘%s’, ‘%d’)” %
 
  #    (‘001’, ‘HP’, 60)
 
  try:
 
      # 执行sql语句
 
      cursor.execute(sql)
 
      # 提交到数据库推行
 
      db.commit()
 
  except:
 
      # Rollback in case there is any error
 
      print ‘插入数据失败!’
 
      db.rollback()

print

def
querydb(db):
 
  # 使用cursor(卡塔尔国方法得到操作游标 
 
  cursor = db.cursor()

“””

 
  # SQL 查询语句
 
  #sql = “SELECT * FROM Student
 
  #    WHERE Grade > ‘%d'” % (80)
 
  sql = “SELECT * FROM Student”
 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 获取具备记录列表
 
      results = cursor.fetchall()
 
      for row in results:
 
          ID = row[0]
 
          Name = row[1]
 
          Grade = row[2]
 
          # 打字与印刷结果
 
          print “ID: %s, Name: %s, Grade: %d” %
 
              (ID, Name, Grade)
 
  except:
 
      print “Error: unable to fecth data”

# 必供给有定点的:关闭cursor对象

def
deletedb(db):
 
  # 使用cursor(卡塔尔(英语:State of Qatar)方法得到操作游标 
 
  cursor = db.cursor()

cs.close()

 
  # SQL 删除语句
 
  sql = “DELETE FROM Student WHERE Grade = ‘%d'” % (100)

conn.close()

 
  try:
 
     # 执行SQL语句
 
     cursor.execute(sql)
 
     # 提交修改
 
     db.commit()
 
  except:
 
      print ‘删除数据战败!’
 
      # 爆发错误时回滚
 
      db.rollback()

if __name__ == “__main__”:

def
updatedb(db):
 
  # 使用cursor(卡塔尔国方法获得操作游标 
 
  cursor = db.cursor()

main()

 
  # SQL 更新语句
 
  sql = “UPDATE Student SET Grade = Grade + 3 WHERE ID = ‘%s'” %
(‘003’)

图片 1

 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 提交到数据库实行
 
      db.commit()
 
  except:
 
      print ‘更新数据战败!’
 
      # 发生错误时回滚
 
      db.rollback()

def
closedb(db):
 
  db.close()

def
main():
 
  db = connectdb()    # 连接MySQL数据库

 
  createtable(db)     # 创建表
 
  insertdb(db)        # 插入数据
 
  print ‘n插入数据后:’
 
  querydb(db) 
 
  deletedb(db)        # 删除数据
 
  print ‘n删除数据后:’
 
  querydb(db)
 
  updatedb(db)        # 更新数据
 
  print ‘n更新数据后:’
 
  querydb(db)

 
  closedb(db)         # 关闭数据库

if
__name__ == ‘__main__’:
 
  main() 

import
pymysql  
  
#
展开数据库连接(ip/数据库客商名/登陆密码/数据库名)  
db = pymysql.connect(“localhost”, “root”,
“root”, “test”)  
#
使用 cursor(卡塔尔国 方法成立叁个游标对象 cursor  
cursor = db.cursor()  
  
#
使用 execute(卡塔尔  方法实践 SQL 查询  
cursor.execute(“SELECT
VERSION()”)  
#
使用 fetchone(卡塔尔国 方法赢得单条数据.  
data = cursor.fetchone()  
print(“Database
version : %s ” % data)  
  
#
关闭数据库连接  
db.close()
  

import
pymysql  
  
#
展开数据库连接(ip/数据库客户名/登陆密码/数据库名)  
db = pymysql.connect(“localhost”, “root”,
“root”, “test”)  
#
使用 cursor(卡塔尔国 方法创设贰个游标对象 cursor  
cursor = db.cursor()  
  
#
SQL 插入语句  
sql
= “””INSERT INTO user(name) 
 
       VALUES (‘Mac’)”””  
try:
 
 
 # 执行sql语句  
 
 cursor.execute(sql)  
 
 # 提交到数据库奉行  
 
 db.commit()  
except:
 
 
 # 假设产生错误则回滚  
 
 db.rollback()  
  
#
关闭数据库连接  
db.close()
  

import
pymysql  
  
#
张开数据库连接(ip/数据库顾客名/登入密码/数据库名)  
db
= pymysql.connect(“localhost”, “root”, “root”, “test”)  
#
使用 cursor(卡塔尔(قطر‎ 方法创设一个游标对象 cursor  
cursor
= db.cursor()  
  
#
SQL 查询语句  
sql
= “SELECT * FROM user”  
  
try:
 
 
  # 执行SQL语句  
 
  cursor.execute(sql)  
 
  # 获取具备记录列表  
 
  results =
cursor.fetchall()  
 
  for row in results:  
 
      id = row[0]  
 
      name = row[1]  
 
      # 打印结果  
 
      print(“id=%s,name=%s” %  
 
            (id, name))  
except:
 
 
  print(“Error: unable to fecth data”)  
  
#
关闭数据库连接  
db.close()
 

import
pymysql  
  
#
张开数据库连接(ip/数据库客户名/登陆密码/数据库名)  
db
= pymysql.connect(“localhost”, “root”, “root”, “test”)  
#
使用 cursor() 方法成立贰个游标对象 cursor  
cursor
= db.cursor()  
  
#
SQL 更新语句  
sql
= “UPDATE user SET name = ‘Bob’ WHERE id = 1”  
try:
 
 
  # 执行SQL语句  
 
  cursor.execute(sql)  
 
  # 提交到数据库施行  
 
  db.commit()  
except:
 
 
  # 产生错误时回滚  
 
  db.rollback()  
 
   
#
关闭数据库连接  
db.close()
 

import
pymysql  
  
#
展开数据库连接(ip/数据库客商名/登陆密码/数据库名)  
db
= pymysql.connect(“localhost”, “root”, “root”, “test”)  
#
使用 cursor(卡塔尔(英语:State of Qatar) 方法创造三个游标对象 cursor  
cursor
= db.cursor()  
  
#
SQL 删除语句  
sql
= “DELETE FROM user WHERE id  = 1”  
try:
 
 
  # 执行SQL语句  
 
  cursor.execute(sql)  
 
  # 提交改进  
 
  db.commit()  
except:
 
 
  # 爆发错误时回滚  
 
  db.rollback()  
  
#
关闭数据库连接  
db.close()
 

  1. mysql.connector 的使用

(1)
什么是 mysql.connector?


由于 MySQL 服务器以独立的长河运转,并经过网络对外地劳工务,所以,需求帮忙Python 的 MySQL 驱动来连接收 MySQL 服务器。

目前,有两个
MySQL 驱动:

mysql-connector-python:是 MySQL 官方的纯
Python 驱动;

MySQL-python
:是包裹了 MySQL C驱动的 Python 驱动。

(2)
安装 mysql.connector:

pip
install mysql-connector-python
pip
install MySQL-python

(3)
使用 mysql.connector:

#!/usr/bin/env
python
#
coding=utf-8

import
mysql.connector

def
connectdb():
 
  print(‘连接到mysql服务器…’)
 
  # 张开数据库连接
 
  # 客户名:p,
密码:12345.,客户名和密码必要改成你自身的mysql客商名和密码,並且要创立数据库TESTDB,并在TESTDB数据库中开创好表Student
 
  db = mysql.connector.connect(user=”p”,
passwd=”12345.”, database=”TESTDB”,use_unicode=True)
 
  print(‘连接上了!’)
 
  return db

def
createtable(db):
 
  # 使用cursor(卡塔尔(قطر‎方法得到操作游标 
 
  cursor = db.cursor()

 
  # 假若存在表Sutdent先删除
 
  cursor.execute(“DROP TABLE IF EXISTS Student”)
 
  sql = “””CREATE TABLE Student (
 
          ID CHAR(10) NOT NULL,
 
          Name CHAR(8),
 
          Grade INT )”””

 
  # 创建Sutdent表
 
  cursor.execute(sql)

def
insertdb(db):
 
  # 使用cursor(卡塔尔(قطر‎方法赢得操作游标 
 
  cursor = db.cursor()

 
  # SQL 插入语句
 
  sql = “””INSERT INTO Student
 
       VALUES (‘001’, ‘CZQ’, 70),
 
              (‘002’, ‘LHQ’, 80),
 
              (‘003’, ‘MQ’, 90),
 
              (‘004’, ‘WH’, 80),
 
              (‘005’, ‘HP’, 70),
 
              (‘006’, ‘YF’, 66),
 
              (‘007’, ‘TEST’, 100)”””

 
  #sql = “INSERT INTO Student(ID, Name, Grade)
 
  #    VALUES (‘%s’, ‘%s’, ‘%d’)” %
 
  #    (‘001’, ‘HP’, 60)
 
  try:
 
      # 执行sql语句
 
      cursor.execute(sql)
 
      # 提交到数据库推行
 
      db.commit()
 
  except:
 
      # Rollback in case there is any error
 
      print ‘插入数据退步!’
 
      db.rollback()

def
querydb(db):
 
  # 使用cursor(卡塔尔(قطر‎方法赢得操作游标 
 
  cursor = db.cursor()

 
  # SQL 查询语句
 
  #sql = “SELECT * FROM Student
 
  #    WHERE Grade > ‘%d'” % (80)
 
  sql = “SELECT * FROM Student”
 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 获取具备记录列表
 
      results = cursor.fetchall()
 
      for row in results:
 
          ID = row[0]
 
          Name = row[1]
 
          Grade = row[2]
 
          # 打字与印刷结果
 
          print “ID: %s, Name: %s, Grade: %d” %
 
              (ID, Name, Grade)
 
  except:
 
      print “Error: unable to fecth data”

def
deletedb(db):
 
  # 使用cursor(卡塔尔(英语:State of Qatar)方法赢得操作游标 
 
  cursor = db.cursor()

 
  # SQL 删除语句
 
  sql = “DELETE FROM Student WHERE Grade = ‘%d'” % (100)

 
  try:
 
     # 执行SQL语句
 
     cursor.execute(sql)
 
     # 提交校勘
 
     db.commit()
 
  except:
 
      print ‘删除数据失利!’
 
      # 发生错误时回滚
 
      db.rollback()

def
updatedb(db):
 
  # 使用cursor(卡塔尔国方法得到操作游标 
 
  cursor = db.cursor()

 
  # SQL 更新语句
 
  sql = “UPDATE Student SET Grade = Grade + 3 WHERE ID = ‘%s'” %
(‘003’)

 
  try:
 
      # 执行SQL语句
 
      cursor.execute(sql)
 
      # 提交到数据库施行
 
      db.commit()
 
  except:
 
      print ‘更新数据失利!’
 
      # 爆发错误时回滚
 
      db.rollback()

def
closedb(db):
 
  db.close()

def
main():
 
  db = connectdb()    # 连接MySQL数据库

 
  createtable(db)     # 创建表
 
  insertdb(db)        # 插入数据
 
  print ‘n插入数据后:’
 
  querydb(db) 
 
  deletedb(db)        # 删除数据
 
  print ‘n删除数据后:’
 
  querydb(db)
 
  updatedb(db)        # 更新数据
 
  print ‘n更新数据后:’
 
  querydb(db)

 
  closedb(db)         # 关闭数据库

if
__name__ == ‘__main__’:
 
  main()











​#!/usr/bin/python
 
#coding=utf-8
 
  
import
mysql.connector  
from
mysql.connector import errorcode  
  
class
mysqlconnectordemo(object):  
 
  def __init__(self):  
 
      pass  
 
  def connect(self,conf):  
 
      try:  
 
          conn = mysql.connector.connect(**conf)  
 
          print(“conn success!”)  
 
      except mysql.connector.Error as err:  
 
          if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
 
 
              print(“Something is wrong with your user name or
password”)  
 
          elif err.errno == errorcode.ER_BAD_DB_ERROR:  
 
              print(“Database does not exist”)  
 
          else:  
 
              print(err)  
 
      else:  
 
          conn.close()  
  
 
  def query(self,conf,sql):  
 
      try:  
 
          conn = mysql.connector.connect(**conf)  
 
          print(“conn success!”)  
 
          cursor = conn.cursor()  
 
          try:  
 
              cursor.execute(sql)  
 
              values =
cursor.fetchall()#回到是三个由元组构成的list,每五个元组是生机勃勃行值
 
 
              print type(values)  
 
              for i in values:  
 
                  print i  
 
          except mysql.connector.Error as err:  
 
              print(‘query datas error!{}’.format(err))  
 
      except mysql.connector.Error as err:  
 
          if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
 
 
              print(“Something is wrong with your user name or
password”)  
 
          elif err.errno == errorcode.ER_BAD_DB_ERROR:  
 
              print(“Database does not exist”)  
 
          else:  
 
              print(err)  
 
      else:  
 
          conn.close()  
  
 
  def insert(self,conf,sql):  
 
      try:  
 
          conn = mysql.connector.connect(**conf)  
 
          print(“conn success!”)  
 
          cursor = conn.cursor()  
 
          try:  
 
              cursor.execute(sql)  
 
              conn.commit()  
 
              cursor.close()  
 
          except mysql.connector.Error as err:  
 
              print(‘insert datas error!{}’.format(err))  
 
      except mysql.connector.Error as err:  
 
          if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
 
 
              print(“Something is wrong with your user name or
password”)  
 
          elif err.errno == errorcode.ER_BAD_DB_ERROR:  
 
              print(“Database does not exist”)  
 
          else:  
 
              print(err)  
 
      else:  
 
          conn.close()  
  

#!/usr/bin/python
 
#coding=utf-8
 
  
import
MySQLdb  
  
class
mysqldbdemo(object):  
 
  def __init__(self):  
 
      pass  
 
  def connect(self):  
 
      conn = MySQLdb.connect(“host_ip”,”user”,”password”,”database”)
 
 
      conn.close()  
  
 
  def query(self,sql):  
 
      conn = MySQLdb.connect(“host_ip”,”user”,”password”,”database”)
 
 
      cursor = conn.cursor()  
 
      try:  
 
          cursor.execute(sql)  
 
          values =
cursor.fetchall()#回来是叁个由元组构成的tuple,每一个元组是意气风发行值
 
 
          print type(values)  
 
          for i in values:  
 
              print i  
 
      except:  
 
          print “Error: unable to fecth data”  
 
      conn.close()  
  
 
  def insert(self,sql):  
 
      conn = MySQLdb.connect(“host_ip”,”user”,”password”,”database”)
 
 
      cursor = conn.cursor()  
 
      try:  
 
          cursor.execute(sql)  
 
          conn.commit()  
 
      except:  
 
          conn.rollback()  
 
      conn.close()  

发表评论

电子邮件地址不会被公开。 必填项已用*标注