1.连接数据库
import pymysql
db = pymysql.connect(host = 'localhost',user = 'root',password = '1994fd',port = 3306)
#通过 connect()方法 声明一个MySQL连接对象db localhost也就是公网IP地址
cursor = db.cursor()
#用cursor()方法获得MySQL的操作游标 利用游标操作SQL语句
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:' ,data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
#第二句SQL执行创建数据库的操作 数据库名为spiders
db.close()
2.创建表:
import pymysql
db = pymysql.connect(host = 'localhost',user = 'root',password = '1994fd',port = 3306,db = 'spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS students(id VARCHAR(255) NOT NULL,\
name VARCHAR(255) NOT NULL ,age INT NOT NULL,PRIMARY KEY (id) )'
cursor.execute(sql)
db.close()
3.向数据库插入数据:
import pymysql
data = {
'id' : '20120001',
'name' : 'Bob',
'age' : 20
}
#传入数据是字典,定义为 data变量
table = 'students'
#表名定义为变量table
keys = ','.join(data.keys())
#需要构造插入的字段 id user age 只需将data的键名拿过来 也就是字段名
values = ','.join(['%s']* len(data))
#构造多个占位符
sql = 'INSERT INTO {table} ({keys}) VALUES ({values})'.format(table = table ,keys =keys,values = values)
db = pymysql.connect(host = 'localhost',user = 'root',password = '123456',port = 3306,db = 'spiders')
cursor = db.cursor
try:
if cursor.execute(sql,tuple(data.values())):
print('Successful')
db.commit()
#必须执行db对象的commit方法才可以实现数据插入 只有执行这个炒菜时真正将语句提交到数据库的执行方法
#对于数据的插入更新 删除 都要调用该方法
except:
print('Faild')
db.rollback()
#rollback方法执行数据回滚相当于什么都没有发生过
db.close()
4.更新数据库:
sql = 'UPDATE students SET age = %s WHERE name = %s'
try :
cursor.execute(sql, (25,'Bob'))
except:
db.rollback()
db.close()
5.如果数据存在,则更新数据,不存在,则插入数据:
data = {
'id' : '20120001',
'name' : 'Bob',
'age' : 20
}
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('Win')
db.commit()
except:
print('Failed')
db.rollback()
db.close()
6.删除数据:
#删除数据
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()
7.查询数据
#查询数据
sql = 'SELECT * FROM students WHERE age >= 20'
try:
cursor.execute(sql)
print('Count',cursor.rowcount)
#调用cursor的rowcount属性获取查询结果的条数
one = cursor.fetchone()
#fetchone()方法可以获取结果的第一条数据 返回结果是元祖形式
results = cursor.fetchall()
#fetchall 得到结果的所有数据,然后将结果和类型打印出来,它是二元重组,每个元素是一个记录
#这里 最后返回的是3条数据 因为它的内部有一个偏移指针用来指向查询结果,最开始偏移指针指向第一条数据
#取一次之后,便指向下一条数据了
print('Results:',results)
print('Results type:',type(results))
for row in results:
print(row)
except:
print('Error')
#=============================================================
#用while 循环加 fetchone()方法来获取所有数据
sql = 'SELECT * FROM students WHERE age >= 20'
try:
cursor.execute(sql)
print('Count',cursor.rowcount)
#调用cursor的rowcount属性获取查询结果的条数
row = cursor.fetchone()
#fetchone()方法可以获取结果的第一条数据 返回结果是元祖形式
while row:
print('Row:',row)
row = cursor.fetchone()
except:
print('Error')