文章目录
以下整理几种python中插入表的几种写法,有些地方可能会遇到插入时字段中本身带有引号或换行符等特殊字符,下面几种方式支持将特殊字符插入到数据库中。
一、python 插入数据库的几种方式
表结构准备:
CREATE TABLE `user` (
`id` int NOT NULL PRIMARY KEY AUTO_INCREMENT comment '主键id',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年龄'
) ENGINE=InnoDB AUTO_INCREMENT=1;
1.1、方式一:手动拼装value
注意:这种方式不支持引号、换行符等需要转义的特殊字符
# coding=utf-8
import sys
import mysql.connector
reload(sys)
sys.setdefaultencoding('utf8')
# 连接参数
conn_params = {
'user': 'root',
'password': '1234',
'host': 'localhost',
'database': 'test',
'auth_plugin': 'caching_sha2_password'
}
if __name__ == '__main__':
# 连接mysql
connection = mysql.connector.connect(**conn_params)
try:
# 使用cursor()方法获取操作游标
with connection.cursor() as cursor:
#name="a'b\r\nc"
name="abc"
age = 10
value = "(null,'"+name+"','"+str(age)+"')"
# 编写SQL语句
sql = "insert into user values {0}".format(value)
# 执行SQL语句
cursor.execute(sql)
finally:
connection.close() # 关闭数据库连接
1.2、方式二:%s传参
这种方式可以支持引号、换行符等需要转义的特殊字符
# coding=utf-8
import sys
import mysql.connector
reload(sys)
sys.setdefaultencoding('utf8')
# 连接参数
conn_params = {
'user': 'root',
'password': '1234',
'host': 'localhost',
'database': 'test',
'auth_plugin': 'caching_sha2_password'
}
if __name__ == '__main__':
# 连接mysql
connection = mysql.connector.connect(**conn_params)
try:
# 使用cursor()方法获取操作游标
with connection.cursor() as cursor:
name="a'b\r\nc"
#name="abc"
age = 10
params = []
params.append(None)
params.append(str(name))
params.append(str(age))
# 编写SQL语句
sql = "insert into user values (%s,%s,%s)"
# 执行SQL语句
cursor.execute(sql,params=params)
# 或者用下面这种方式
#cursor.execute(sql, (None,str(name),str(age)) )
finally:
connection.close() # 关闭数据库连接
1.3、批量插入(底层for循环单条插入)
底层逻辑是for循环单条插入,并不是真正意义上的批量插入
import pymysql
#连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
cursor = conn.cursor()
#批量插入数据
sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s)"
values = [('value1', 'value2'), ('value3', 'value4'), ('value5', 'value6')]
cursor.executemany(sql, values)
#提交事务
conn.commit()
#关闭游标和连接
cursor.close()
conn.close()
1.4、批量插入(真正意义的批量插入)
import pymysql
#连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
cursor = conn.cursor()
#批量插入数据
sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s),(%s, %s)"
cursor.execute(sql, ('value1', 'value2','value3', 'value4'))
#提交事务
conn.commit()
#关闭游标和连接
cursor.close()
conn.close()
二、更新数据库
2.1、单行更新数据库
import pymysql
#连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
cursor = conn.cursor()
#更新单行数据
sql = "UPDATE table_name SET column1 = %s WHERE condition_column = %s"
cursor.execute(sql, ('new_value', 'condition_value'))
#提交事务
conn.commit()
#关闭游标和连接
cursor.close()
conn.close()
2.2、批量更新数据库
底层是for循环单条更新
import pymysql
#连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname')
cursor = conn.cursor()
#批量更新数据
sql = "UPDATE table_name SET column1 = %s WHERE condition_column = %s"
values = [('new_value1', 'condition_value1'), ('new_value2', 'condition_value2')]
cursor.executemany(sql, values)
#提交事务
conn.commit()
#关闭游标和连接
cursor.close()
conn.close()