返回目标python
安装mysql:
sudo apt-get install -y mysql-server mysql-client
git
启动、关闭和重启MySQL服务:
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
sudo service mysql status:查看状态
netstat -an|grep 3306:查看mysql是否启动成功,监听3306端口github
安装pymysql:
pip3 install pymysql
sql
返回目标数据库
连接以前,要启动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()
属性 | 解释 |
---|---|
原子性(atomicity) | 事务是一个不可分割的工做单位,事务中包括的诸操做要么都作,要么都不作 |
一致性(consistency) | 事务必须使数据库从一个一致性状态变到另外一个一致性状态。一致性与原子性是密切相关的 |
隔离性(isolation) | 一个事务的执行不能被其余事务干扰,即一个事务内部的操做及使用的数据对并发的其余事务是隔离的,并发执行的各个事务之间不能互相干扰 |
持久性(durability) | 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其余操做或故障不该该对其有任何影响 |
try: cursor.execute(sql) cursor.commit() # 提交,数据才被真正写到了数据库中 except: db.rollback() # 回滚操做,至关与没有进行操做
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
# 封装了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()
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
# 一种去重的方法,若是数据存在,则更新数据;若是数据不存在,则插入数据 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倍
DELETE FROM table_name [WHERE Clause]
# 将条件看成字符串来传递,以实现删除操做 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()
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]
cursor.execute(sql) print('Count:', cursor.rowcount) # rowcount属性获取查询结果的条数 one = cursor.fetchone() # fetchone()方法,这个方法能够获取结果的第一条数据,返回结果是元组形式 print('One:', one) results = cursor.fetchall() # fetchall()方法返回的是偏移指针指向的数据一直到结束的全部数据