Python MySQL 插入表

本文详细介绍了如何使用Python连接MySQL数据库并进行数据插入操作,包括单条记录和多条记录的插入,以及如何获取最后插入行的ID。

章节


插入表

要把记录插入到MySQL中的表中,使用“INSERT INTO”语句。

示例

在“customers”表中插入一条记录:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="你的用户名",
  passwd="你的密码",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "条记录已插入")

注意: 调用mydb.commit()语句提交修改,否则修改不会生效。

插入多行

要将多行插入到表中,使用executemany()方法。

executemany()方法的第二个参数是一个元组列表,包含了要插入的数据:

示例

填写“客户”表格:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="你的用户名",
  passwd="你的密码",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

mycursor.executemany(sql, val)

mydb.commit()

print(mycursor.rowcount, " 条已经插入")

获取插入行的ID

可以通过查询cursor对象,获得刚才插入行的id。

注意: 如果插入多行,则返回最后插入行的id。

示例

插入一行,并返回ID:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="你的用户名",
  passwd="你的密码",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("Michelle", "Blue Village")
mycursor.execute(sql, val)

mydb.commit()

print("1 条记录插入, ID:", mycursor.lastrowid)

转载于:https://www.cnblogs.com/jinbuqi/p/11588806.html

<think>首先,用户的问题是:“我想将Python中的数据插入MySQL数据库中”,意思是“How to insert a Python list into a MySQL table”。这是一个关于使用Python操作MySQL数据库的具体问题。 根据系统级指令: - 所有行内数学达式必须使用$...$格式。但在这个上下文中,问题不涉及数学达式,所以可能不需要。 - 独立公式必须使用$$...$$格式并单独成段。同样,可能不适用。 - LaTeX语法正确:确保在需要时使用正确的LaTeX。 - 使用中文回答:整个响应必须用中文。 - 生成相关问题:在回答结束时,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识:引用来自提供的参考引用。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考提供的站内引用,但用户说“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户的问题构建回答。 提供的引用: - [^1]: 关于MySQL INSERT语句的教程。 - [^2]: 一个Python数据库demo,包括查询、导出、导入、批量插入等方法。 - [^3]: 一个SQL语句示例,用于INSERT ON DUPLICATE KEY UPDATE。 - [^4]: 关于安装MySQL连接器的信息。 用户的问题是将Python插入MySQL中。所以,我需要: 1. 解释如何连接到MySQL数据库。 2. 展示如何将列数据插入中。 3. 可能使用Python库如mysql-connector-python或PyMySQL。 4. 参考提供的引用,如果相关。 步骤: - 安装必要的库:如引用[^4]提到的mysql-connector-python或PyMySQL。 - 建立数据库连接。 - 准备SQL INSERT语句。 - 将Python转换为可插入的数据格式(如元组列)。 - 执行插入操作,可能使用executemany()来批量插入。 从引用[^2]中,它提到了"inserts方法:批量插入数据库",这暗示了批量插入。 引用[^3]给出了一个SQL语句示例。 结构回答: 1. **介绍**:简要说明问题。 2. **步骤**: - 安装库。 - 导入库。 - 建立连接。 - 创建游标。 - 准备SQL语句。 - 插入数据(批量插入)。 3. **代码示例**:提供完整的Python代码示例。 4. **注意事项**:如处理错误、事务等。 5. **相关问题**:生成相关问题。 用中文回答。 最后,生成相关问题。 代码示例:使用mysql-connector-python,因为它被引用[^4]提到。 完整代码: - 假设列是列的列,每个子列一行。 - 使用executemany()进行批量插入。 引用标识:在回答中,如果引用特定部分,添加[^n]。 例如: - 引用[^4]提到安装连接器。 - 引用[^3]给出SQL语句。 - 引用[^2]提到批量插入方法。 生成相关问题: - 例如: 1. 如何批量插入数据以提高性能? 2. 如何处理插入时的重复键? 3. 如何从数据库查询数据到Python? 确保回答真实可靠:基于标准实践。</think>### 如何将Python数据插入MySQL数据库Python中的数据插入MySQL数据库是一个常见的任务,通常涉及以下步骤:安装PythonMySQL连接器、建立数据库连接、准备SQL INSERT语句,并使用批量插入方法来提高效率。下面我将以清晰的结构逐步解释并提供一个完整的Python代码示例。整个过程基于mysql-connector-python库(一个纯Python实现的MySQL连接器),因为它易于安装和使用[^4]。 #### 步骤1: 安装必要的库 首先,确保安装了PythonMySQL连接器。推荐使用`mysql-connector-python`或`PyMySQL`。您可以通过pip安装: ```bash pip install mysql-connector-python ``` 或 ```bash pip install pymysql ``` 这些库提供了与MySQL交互的接口,支持批量插入操作[^4]。 #### 步骤2: 准备数据库结构 在MySQL中创建一个来存储数据。假设您有一个名为`my_table`的,结构如下(以示例为准): ```sql CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT ); ``` 您的Python数据应与结构匹配。例如,列可以是列的列(每个子列一行数据): ```python data_list = [ ["Alice", 30], ["Bob", 25], ["Charlie", 35] ] ``` #### 步骤3: 编写Python代码插入数据 以下是完整的Python代码示例,演示如何连接到MySQL数据库,并将列数据批量插入中。代码使用`mysql.connector`库,并包括错误处理以确保可靠性。 ```python import mysql.connector from mysql.connector import Error def insert_list_to_mysql(host, user, password, database, table, data): """ 将Python数据批量插入MySQL 参数: host: MySQL服务器地址 user: 用户名 password: 密码 database: 数据库名 table: 名 data: Python(格式: [[值1, 值2, ...], ...]) """ try: # 建立数据库连接 connection = mysql.connector.connect( host=host, user=user, password=password, database=database ) if connection.is_connected(): cursor = connection.cursor() # 准备SQL INSERT语句(根据结构动态生成) # 示例:假设有'name'和'age'列 placeholders = ', '.join(['%s'] * len(data[0])) # 生成占位符,如 '%s, %s' columns = "name, age" # 替换为您的列名 sql = f"INSERT INTO {table} ({columns}) VALUES ({placeholders})" # 批量插入数据(使用executemany提高性能) cursor.executemany(sql, data) connection.commit() # 提交事务 print(f"成功插入 {cursor.rowcount} 行数据") except Error as e: print(f"数据库错误: {e}") if connection.is_connected(): connection.rollback() # 出错时回滚事务 finally: if connection.is_connected(): cursor.close() connection.close() print("数据库连接已关闭") # 示例用法 if __name__ == "__main__": # 数据库配置(替换为您的实际信息) host = "localhost" user = "your_username" password = "your_password" database = "your_database" table = "my_table" # 示例数据列 data_list = [ ["Alice", 30], ["Bob", 25], ["Charlie", 35] ] # 调用函数插入数据 insert_list_to_mysql(host, user, password, database, table, data_list) ``` #### 关键点说明 - **批量插入**:使用`executemany()`方法一次性插入所有数据,这比逐行插入更高效(尤其适合大型列),能减少网络往返和事务开销[^2]。 - **SQL语句生成**:代码中动态生成INSERT语句的占位符(`%s`),确保与列结构匹配。如果结构变化,只需调整`columns`变量。 - **错误处理**:包括连接异常、SQL执行错误的事务回滚(`rollback()`),防止数据不一致。 - **性能优化**:对于海量数据(如10,000+行),可以分批插入(例如每次插入1000行)以避免内存溢出。 - **处理重复键**:如果有唯一约束,可使用`ON DUPLICATE KEY UPDATE`语句(如引用[^3]所示),修改SQL为: ```python sql = f"INSERT INTO {table} ({columns}) VALUES ({placeholders}) ON DUPLICATE KEY UPDATE name=VALUES(name), age=VALUES(age)" ``` #### 注意事项 - **安全性**:避免SQL注入风险,永远不要直接拼接字符串(如使用`%s`占位符)。 - **数据类型匹配**:确保Python元素类型与MySQL列类型兼容(例如整数、字符串)。 - **测试**:先在开发环境测试代码,再用于生产环境。 通过以上步骤,您可以高效地将Python数据插入MySQL。如果您有具体结构或数据格式,我可以进一步优化代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值