目录
前言
最近在学习使用python操作三大数据库(Mysql, Redis, MongoDB),记录一些常用的代码
运行环境
工具 | 版本 |
---|---|
系统 | windows 10 x64 |
python | 3.7 |
PyCharm | 2019.3.3 x64 |
MySQL | 8.0.12.0 |
使用的库
import mysql.connector.pooling
import mysql.connector
import os
逻辑库操作
1.创建逻辑库
def setdatabase():
try:
# 创建链接
con = mysql.connector.connect(
host='localhost',
port='3306',
user='root',
password='password'
)
print('链接成功')
# 创建游标
cursor = con.cursor()
database = 'helloword'
sql = 'create database '+database+';'
# 执行sql语句
cursor.execute(sql)
print('创建逻辑库成功')
# 关闭链接
con.close()
except:
if 'con' in dir():
print('创建失败')
else:
print('链接失败')
2.删除逻辑库
def deldatabase():
try:
con = mysql.connector.connect(
host='localhost',
port='3306',
user='root',
password='password'
)
print('链接成功')
cursor = con.cursor()
database = 'helloword'
sql = 'drop database ' + database + ';'
cursor.execute(sql)
print('删除逻辑库成功')
con.close()
except:
if 'con' in dir():
print('创建失败')
else:
print('链接失败')
3.重命名逻辑库
def renamedatabase():
database = 'helloword'
newdatabase = 'newhelloword'
# 先转储原有逻辑库
os.system('mysqldump -h localhost -P 3306 -u root -ppassword '+database+' > ./'+newdatabase+'-data.sql')
# 创建新的逻辑库
try:
con = mysql.connector.connect(
host='localhost',
port='3306',
user='root',
password='password'
)
print('链接成功')
cursor = con.cursor()
sql = 'create database '+newdatabase+';'
cursor.execute(sql)
print('创建逻辑库成功')
con.close()
except:
if 'con' in dir():
print('创建失败')
else:
print('链接失败')
# 导入转储的逻辑库
os.system('mysql -h localhost -P 3306 -u root -ppassword '+newdatabase+' < ./'+newdatabase+'-data.sql')
# 删除旧的逻辑局
try:
con = mysql.connector.connect(
host='localhost',
port='3306',
user='root',
password='password'
)
print('链接成功')
cursor = con.cursor()
sql = 'drop database ' + database + ';'
cursor.execute(sql)
print('删除逻辑库成功')
con.close()
except:
if 'con' in dir():
print('创建失败')
else:
print('链接失败')
# 删除转储文件
os.remove('./'+newdatabase+'-data.sql')
4.查询逻辑库
def showdatabase():
try:
con = mysql.connector.connect(
host='localhost',
port='3306',
user='root',
password='password'
)
print('链接成功')
cursor = con.cursor()
sql = 'show databases;'
cursor.execute(sql)
databases = cursor.fetchall()
for eachdatabases in databases:
print(eachdatabases[0])
print('查看逻辑库成功')
con.close()
except:
if 'con' in dir():
print('创建失败')
else:
print('链接失败')
数据表操作
0.基础内容
数值数据类型
数据类型 | 大小 | 说明 |
---|---|---|
TINYINT | 1字节 | 字节整数 |
SMALLINT | 2字节 | 小整数 |
MEDIUMINT | 3字节 | 中整数 |
INT | 4字节 | 整数 |
BIGINT | 8字节 | 长整数 |
FLOAT | 4字节 | 单精度浮点数 |
DOUBLE | 8字节 | 双精度浮点数 |
DECIMAL | M+2字节 | DECIMAL(M, D) 可变数值类型 |
字符串数据类型
数据类型 | 大小 | 说明 |
---|---|---|
CHAR | 1-255 | 固定长度 |
VARCHAR | 1-65535 | 不固定长度 |
TEXT | 1-65535 | 可变长度 |
MEDIUMTEXT | 1-1.6千万 | 可变长度 |
LONGTEXT | 1-42亿 | 可变长度 |
日期数据类型
数据类型 | 大小 | 说明 |
---|---|---|
DATE | 3字节 | 日期 |
TIME | 3字节 | 时间 |
YEAR | 1字节 | 年 |
DATETIME | 8字节 | 日期时间 |
TIMESTAMP | 4字节 | 时间戳 |
字段约束
约束类型 | 关键字 | 说明 |
---|---|---|
主键约束 | PRIMARY KEY | 字段唯一,且不能为NULL,只能一个字段使用 |
非空约束 | NOT NULL | 字段值不能为 NULL |
唯一约束 | UNIQUE | 字段唯一,且可以为NULL |
外键约束 | FOREING KEY | 与其他数据表关联 |
日期格式化类型
占位符 | 说明 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
日期偏移类型
类型 | 说明 |
---|---|
MICROSECOND | |
SECOND | |
MINUTE | |
HOUR | |
DAY | |
WEEK | |
MONTH | |
QUARTER | |
YEAR | |
SECOND_MICROSECOND | |
MINUTE_MICROSECOND | |
MINUTE_SECOND | |
HOUR_MICROSECOND | |
HOUR_SECOND | |
HOUR_MINUTE | |
DAY_MICROSECOND | |
DAY_SECOND | |
DAY_MINUTE | |
DAY_HOUR | |
YEAR_MONTH |
1.创建数据表
def settable():
try:
config = {
'host': 'localhost',
'port': '3306',
'user': 'root',
'password': 'password',
'database': 'helloword'
}
tablename = 'helloword'
# 创建连接池
pool = mysql.connector.pooling.MySQLConnectionPool(**config, pool_size=4)
print('链接成功')
# 获取空闲链接
con = pool.get_connection()
# 开启事务
con.start_transaction()
cursor = con.cursor()
sql = 'create table ' + tablename
sql += """
(
id int unsigned primary key,
name varchar(20) not null
);
"""
cursor.execute(sql)
# 提交事务
con.commit()
print('数据表创建成功')
except:
if 'con' in dir():
# 回滚事务
con.rollback()
print('操作回滚')
else:
print('链接失败')
finally:
if 'con' in dir(