pymysql
一、概念
pymysql是一個支持 python 的連接mysql 的庫
二、SQL語句
建庫:
"CREATE DATABASE IF NOT EXISTS mingyue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
case insensitive 大小寫不敏感
刪庫:
DROP DATABASE mingyue
建表:
CREATE TABLE user(
id int(11) DEFAULT NULL ,
name VARCHAR(50) DEFAULT NULL ,
password VARCHAR(30) DEFAULT NULL ,
birthday TIMESTAMP DEFAULT now()
)engine=innodb DEFAULT CHARACTER set utf8;
'''
插入數據(一條記錄):
"INSERT INTO students(id,name,age) VALUES(%s,%s,%s)"
更新數據(根據where更新部分字段)
"UPDATE students SET age = %s WHERE name =%s "
主鍵存在則更新,不存在則插入
"INSERT INTO {table}({keys})VALUES ({values}) ON DUPLICATE KEY UPDATE".format(table=table,keys=keys,values=values)
刪除數據(根據condition 刪除一條記錄
"DELETE FROM {table} WHERE {condition}".format(table=table,condition=condition)
三、代碼
總結:
1、 過程
連接數據庫----- 獲得cursor------- 整理數據data的key,value ------構造執行SQL語句
2、 執行SQL語句構架:
try:
cursor.execute(sql,(id,name,age))
conn.commit()
print('insert data done')
except pymysql.Error as e:
conn.rollback()
print(e.args[1],e.args[0])
print('insert data failed')
3、 重點是 SQL語句的構造
import pymysql
# 建庫
try:
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456'
)
cur=conn.cursor()
create_database_sql='CREATE DATABASE IF NOT EXISTS mingyue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
# COLLATE utf8_general_ci 大小寫不敏感 case insensitive
cur.execute(create_database_sql)
cur.close()
print('創建數據庫 mingyue 成功!')
except pymysql.Error as e:
print('您好 pymysql.Error: ',e.args[0],e.args[1])
刪庫:
import pymysql
# 刪庫
try:
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
db = 'py3_tstgr'
)
cur=conn.cursor()
drop_database_sql='DROP DATABASE py3_tstgr '
cur.execute(drop_database_sql)
cur.close()
print('刪除數據庫 py3_tstgr 成功!')
except pymysql.Error as e:
print('pymysql.Error: ',e.args[0],e.args[1])
建表:
import pymysql
# 建表
try:
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
db='py3_tstgr',
charset='utf8'
)
cur=conn.cursor()
cur.execute('drop table if exists user;')
create_table_sql='''
CREATE TABLE user(
id int(11) DEFAULT NULL ,
name VARCHAR(50) DEFAULT NULL ,
password VARCHAR(30) DEFAULT NULL ,
birthday TIMESTAMP DEFAULT now()
)engine=innodb DEFAULT CHARACTER set utf8;
'''
cur.execute(create_table_sql)
print('創建表成功!')
except pymysql.Error as e:
coon.rollback()
print('您好,mysql.Error: ',e.args[0],e.args[1])
import pymysql
#連接到本地MySQL,建立數據庫
def create_db():
#建立連接
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456'
)
#獲得cursor光標
cursor = conn.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchall()
print('database version:',data)
#建立數據庫
cursor.execute("CREATE DATABASE numb DEFAULT CHARACTER SET utf8")
print('create database successfully !')
conn.close()
#刪除數據庫
def drop_db():
#建立連接
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db='numb'
)
#獲得cursor光標
cursor = conn.cursor()
sql = "DROP DATABASE numb"
try:
cursor.execute(sql)
print('drop database sucsessfully')
except pymysql.Error as e:
conn.rollback()
print('failed drop database')
print(e.args[0],e.args[1])
##建表
def create_table():
#建立連接
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db='numb'
)
#獲得cursor光標
cursor = conn.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)
)
'''
try:
cursor.execute(sql)
conn.close()
print('create table sucsefully')
except pymysql.Error as e:
print('failed create table')
print(e.args[0],e.args[1])
#插入數據:
def insert_data():
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db='numb'
)
cursor = conn.cursor()
sql ="INSERT INTO students(id,name,age) VALUES(%s,%s,%s)"
id = '001'
name='bob'
age=20
#注意空客,注意數據類型,varchar 要加引號
try:
cursor.execute(sql,(id,name,age))
conn.commit()
print('insert data done')
except pymysql.Error as e:
print(e.args[1],e.args[0])
conn.rollback()
print('insert data failed')
#插入字典
def insert_dict():
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password ='123456',
db = 'numb'
)
cursor = conn.cursor()
data ={
'id':'002',
'name':'yue',
'age':22
}
table = 'students'
keys = ','.join(data.keys())
#len計算的爲字段的多少
values = ','.join(['%s']*len(data))
sql = "INSERT INTO {table}({keys})VALUES({values})".format(table=table,keys=keys,values=values)
#print('康康sql',sql)
#康康sql INSERT INTO students(id,name,age)VALUES(%s,%s,%s)
#執行
try:
#tuple()???????
if cursor.execute(sql,tuple(data.values())):
print('insert dict done')
conn.commit()
except pymysql.Error as e:
conn.rollback()
print('insert dict failed')
print(e.args[0],e.args[1])
#更新數據
def update_data():
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db = 'numb'
)
cursor = conn.cursor()
#SET後爲設置改動的值,where後爲條件,構造SQL語句,使用時傳入一個元組即可。
sql = "UPDATE students SET age = %s WHERE name =%s "
try:
cursor.execute(sql,(100,'bob'))
conn.commit()
print('update data done')
except pymysql.Error as e:
conn.rollback()
print('updata data error')
print(e.args[0],e.args[1])
conn.close()
#主鍵存在更新,不存在插入
def smart_insert():
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db = 'numb'
)
cursor = conn.cursor()
data = {
'id':'001',
'name':'jerry',
'age':1
}
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s']*len(data))
######這一句SQL語句要求輸入兩份values值,一份是insert的,一份是update的。
sql = "INSERT INTO {table}({keys})VALUES ({values}) ON DUPLICATE KEY UPDATE".format(table=table,keys=keys,values=values)
print('第一個sql: ',sql)
update = ','.join([" {key}=%s".format(key=key) for key in data])
#id=%s, name=%s, age=%s
print('您好:updata',update)
print(','.join(data.keys()))
sql = sql+update
print('第二個 sql =sql +update',sql)
try:
if cursor.execute(sql,tuple(data.values())*2):
print('smart insert done')
conn.commit()
except pymysql.Error as e:
conn.rollback()
print('smart insert eror')
print(e.args[0],e.args[1])
#刪除數據:
def delete_data():
conn = pymysql.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456'
db = 'numb'
)
cursor = conn.cursor()
table = 'students'
condition = 'name==jerry'
sql = "DELETE FROM {table} WHERE {condition}".format(table=table,condition=condition)
try:
cursor.execute(sql)
conn.commit()
print('delete data done')
except pymysql.Error as e:
conn.rollback()
print('failed delete data')
print(e.args[0],e.args[1])
if __name__ == "__main__":
#create_db()
#create_table()
#insert_data()
#insert_dict()
#smart_insert()
#update_data()
delele_data()
#drop_db()