简单使用:
import pymysql
db = pymysql.connect(host='',
user='',
password='',
database='')
cursor = db.cursor()
try:
cursor.execute("SELECT * FROM employees LIMIT 200")
results = cursor.fetchall()
print(results)
except Exception as e:
print("查询失败" + str(e))
创建连接 pymsql.connect() 方法的可传参数
pymsql.connect()的可传参数:
参数 | 说明 |
---|
user | 数据库用户名 |
password | 数据库用户密码 |
host | 数据库连接地址 |
database | 要连接的数据库名称 |
port | 端口号,默认3306 |
charset | 要连接的数据库的字符编码(可以在终端登陆mysql后使用 \s 查看),默认"" |
connect_timeout | 连接数据库的超时时间,(默认值:10,最小值:1,最大值:31536000) |
unix_socket | 可以选择使用unix套接字而不是TCP/IP,默认None |
sql_mode | 要使用的默认sql_mode,默认None |
read_default_file | 指定my.cnf文件以从[client]部分下读取这些参数,默认None |
conv | 要使用的转换词典,而不是默认词典,默认None |
use_unicode | 是否默认为unicode字符串,默认True |
client_flag | 要发送到MySQL的自定义标志。在常量.CLIENT中查找潜在值,默认0 |
cursorclass | 要使用的自定义游标类,默认Cursor |
init_command | 建立连接时要运行的初始SQL语句,默认None |
read_default_group | 配置文件中要读取的组,默认None |
autocommit | 自动提交模式。无表示使用服务器默认值。(默认值:False) |
local_infile | 布尔值以启用LOAD DATA local命令。(默认值:False) |
max_allowed_packet | 发送到服务器的数据包的最大大小(字节)。(默认值:16MB)。仅用于限制“LOAD LOCAL INFILE”数据包的大小小于默认值(16KB) |
defer_connect | 在构造时不显式连接-等待连接调用。(默认值:False) |
auth_plugin_map | 处理插件的类的插件名称字典,默认None |
read_timeout | 读取超时时间,默认None |
write_timeout | 写入超时时间,默认None |
bind_address | 当客户端具有多个网络接口时,请指定连接到主机的接口。参数可以是主机名或IP地址,默认None |
binary_prefix | 在字节和字节数组上添加二进制前缀,默认False |
program_name | 程序名称,默认None |
server_public_key | SHA256身份验证插件公钥值。,默认None |
ssl | 类似于mysql_ssl_set()参数的参数字典,默认None |
ssl_ca | 包含PEM格式ca证书的文件路径,默认None |
ssl_cert | 包含PEM格式客户端证书的文件的路径,默认None |
ssl_disabled | 禁用TLS的布尔值,默认None |
ssl_key | 包含客户端证书的PEM格式私钥的文件路径,默认None |
ssl_verify_cert | 设置为true以检查服务器证书的有效性,默认None |
ssl_verify_identity | 设置为true以检查服务器的标识,默认None |
compress | 不支持 |
named_pipe | 不支持 |
passwd | 已弃用,数据库的别名 |
db | 已弃用,密码别名 |
连接对象 conn = pymsql.connect() 方法
方法 | 说明 |
---|
conn.cursor() | 创建并返回游标 |
conn.commit() | 提交当前事务 |
conn.rollback() | 回滚当前事务 |
conn.close() | 关闭connection |
游标对象 cursor() 方法
方法 | 说明 |
---|
execute() | 用于执行一个数据库的查询命令 |
executemany(query, args) | 针对一个查询运行多个数据 |
fetchone() | 获取结果集的下一行 |
fetchmany(size) | 获取结果集中的size行数据 |
fetchall() | 获取结果集中的所有行 |
rowcount | 最近一次execute返回数据/影响的行数 |
close() | 关闭游标 |
使用示例
创建数据库表
import pymysql
db = pymysql.connect(host='localhost',
user='root',
password='',
database='laomao')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
sql = """
CREATE TABLE `employees` (
`employee_id` int primary key auto_increment,
`employee_name` varchar(20) DEFAULT NULL,
`email` varchar(25) NOT NULL,
`birthday` datetime null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
cursor.execute(sql)
db.close()
插入数据操作
import pymysql
db = pymysql.connect(host='localhost',
user='root',
password='',
database='laomao')
cursor = db.cursor()
sql = """
INSERT INTO ssm.employees (employee_name, email, birthday)
VALUES ('乐昌','905364660@qq.com','2008-08-18 00:00:00'),
('老猫','123@123.com','2020-02-22 06:06:06')
"""
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
数据查询操作
import pymysql
db = pymysql.connect(host='localhost',
user='root',
password='',
database='laomao')
cursor = db.cursor()
sql = """
SELECT * FROM employees LIMIT 200
"""
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
employee_id = row[0]
name = row[1]
email = row[2]
birthday = row[3]
print("employee_id=%s, name=%s, email=%s, birthday=%s" % (employee_id, name, email, birthday))
except:
print("Error: unable to fetch data")
db.close()
employee_id=1, name=乐昌, email=905364660@qq.com, birthday=2008-08-18 00:00:00
employee_id=2, name=老猫, email=123@123.com, birthday=2020-02-22 06:06:06
数据更新操作
import pymysql
db = pymysql.connect(host='localhost',
user='root',
password='',
database='laomao')
cursor = db.cursor()
sql = """
UPDATE ssm.employees SET employee_name = '彦祖' WHERE employee_id = 1
"""
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
数据删除操作
import pymysql
db = pymysql.connect(host='localhost',
user='root',
password='',
database='laomao')
cursor = db.cursor()
sql = """
DELETE FROM employees WHERE employee_id = 2
"""
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
SQL中使用变量
birthday = "2008-08-18 00:00:00"
sql = "SELECT * FROM employees WHERE birthday = '" + birthday + "' LIMIT 10"
print(sql)
SELECT * FROM employees WHERE birthday = '2008-08-18 00:00:00' LIMIT 10
封装使用
import pymysql
def conn():
'''连接MySQL数据库'''
try:
conn = pymysql.connect(
host='',
user='',
password='',
database=''
)
conn.set_charset('utf8')
return conn
except Exception:
raise Exception("数据库连接失败")
def query(sql):
print('sql:'+sql)
db = conn()
cursor = db.cursor()
try:
cursor.execute(sql)
result = cursor.fetchall()
if result: return result
return ["none"]
except Exception as e:
db.rollback()
print("查询失败," + str(e))
finally:
cursor.close()
db.close()
if __name__ == '__main__':
select_data = query("SELECT * FROM tb_name LIMIT 20")
print(select_data)