pymysql操做mysql

pymysql操做mysql

安装,启动及连接

返回目标python

MySQL

pymysql

安装pymysql:
pip3 install pymysqlsql

连接数据库

返回目标数据库

连接以前,要启动mysql并发

import pymysql  # 1.导入pymysql包

db = pymysql.connect(host='localhost', user='root',
    password='123456',port=3306)  # 2.声明一个MySQL链接对象db,在远程host传入其公网ip
cursor =db.cursor()  # 3.得到操做游标
cursor.execute('SELECT VERSION()')  # 4.经过游标进行操做,execute()执行sql语句
data = cursor.fetchone()  # 得到第一条数据
print('Database version:', data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8") # 建立数据库,默认utf-8编码
db.close()  # 5.关闭链接

建立表

返回目标ide

建立数据库后,在链接时须要额外指定一个参数dbfetch

import pymysql

db = connect(host='localhost', user='root',
    password='123456', port=3306, db='spiders')  #建立数据库后,在链接时须要额外指定一个参数db
cursor = db.cursor()
cursor.execute('CREAT TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))')
db.close()

事务性ACID

属性 解释
原子性(atomicity) 事务是一个不可分割的工做单位,事务中包括的诸操做要么都作,要么都不作
一致性(consistency) 事务必须使数据库从一个一致性状态变到另外一个一致性状态。一致性与原子性是密切相关的
隔离性(isolation) 一个事务的执行不能被其余事务干扰,即一个事务内部的操做及使用的数据对并发的其余事务是隔离的,并发执行的各个事务之间不能互相干扰
持久性(durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其余操做或故障不该该对其有任何影响
  • 更改操做(增删改)事务性标准写法:
try:
    cursor.execute(sql)
    cursor.commit()  # 提交,数据才被真正写到了数据库中
except:
    db.rollback()  # 回滚操做,至关与没有进行操做

插入数据

返回目标

  • sql语法:
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
  • python操做
# 封装了sql语句和插入操做

data = {
    'id': '2012001',
    'name': 'Bob',
    'age':20
    }
table = 'students'
keys = ','.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
   if cursor.execute(sql, tuple(data.values())):
       print('Successful')
       db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

更新数据

返回目标

  • sql语法
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
  • python操做
# 一种去重的方法,若是数据存在,则更新数据;若是数据不存在,则插入数据

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 21
}
 
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
 
sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys, values=values)
update = ','.join([" {key} = %s".format(key=key) for key in data])
sql += update
try:
    if cursor.execute(sql, tuple(data.values())*2):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

ON DUPLICATE KEY UPDATE:意思是若是主键已经存在,就执行更新操做

完整的SQL构造出来是:INSERT INTO students(id, name, age) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE id = %s, name = %s, age = %s因此execute()方法的第二个参数元组就须要乘以2变成原来的2倍

删除数据

返回目录

  • sql语法
DELETE FROM table_name [WHERE Clause]
  • python操做
# 将条件看成字符串来传递,以实现删除操做

table = 'students'
condition = 'age > 20'

sql = 'DELETE FROM  {table} WHERE {condition}'.format(table=table, condition=condition)
try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()

db.close()

查询操做

返回目录

  • sql语法
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • python操做
cursor.execute(sql)
print('Count:', cursor.rowcount)  # rowcount属性获取查询结果的条数
one = cursor.fetchone()  # fetchone()方法,这个方法能够获取结果的第一条数据,返回结果是元组形式
print('One:', one)
results = cursor.fetchall()  # fetchall()方法返回的是偏移指针指向的数据一直到结束的全部数据
相关文章
相关标签/搜索