写入mysql数据库

#coding=utf-8
__author__ = 'mac'

#Beautifulsoup的用法

#导入Beautifulsoup包
from bs4 import BeautifulSoup as bs
from urllib.request import urlopen
import re
#引入开发包
import pymysql



# 请求URL并把结果用utf-8编码
resp=urlopen("https://en.wikipedia.org/wiki/Main_page").read().decode("utf-8")
# 使用BeautifulSoup去解析
soup=bs(resp,"html.parser")
# 获取所有以/wiki开头的a 标签的href属性
listUrls=soup.findAll("a",href=re.compile("^/wiki/"))
# 打印出url
for url in listUrls:
    # print(url) #打印出来是整条a标签
    if not re.search("\.(jpg|JPG)$",url["href"]): #上面取的有包含.jpg的图片,故要在href属性中排除
        #将url的名字+"https://en.wikipedia.org"+url中的href属性合并打印出来
        print(url.get_text(),"<---->","https://en.wikipedia.org"+url["href"])
        #2.将数据写入数据库
        #获取数据库链接
        connection=pymysql.connect(host='127.0.0.1',
                                   port=3306,
                                   user='root',
                                   passwd='root',
                                   db='imooc',
                                   charset='utf8mb4')
        try:
            #获取会话指针,用于执行mysql
            # connection.cursor()
            with connection.cursor() as cursor:
                # 创建sql语句
                sql="insert into `wikiinfo`(`urlname`,`urlhref`)VALUES (%s,%s)"
                #执行sql语句
                cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"]))
                #提交
                connection.commit()
        finally:
            connection.close()

<think>我们被要求使用Python连接并写入MySQL数据库。根据引用,有几种方法可以实现,主要使用pymysql或sqlalchemy。 步骤: 1. 安装必要的库:pymysql 或 sqlalchemy(包含pymysql作为驱动) 2. 建立数据库连接 3. 创建游标对象 4. 执行SQL语句(写入数据) 5. 提交事务 6. 关闭连接 我们将展示两种常见方式:直接使用pymysql和使用sqlalchemy(ORM方式这里不展开,主要展示核心的execute方式)。 方法一:使用pymysql 引用[3]和[4]展示了直接使用pymysql连接数据库并执行操作。 方法二:使用sqlalchemy(结合pymysql驱动)创建引擎,然后使用原生SQL执行,如引用[2]所示。 由于用户问题要求写入数据,我们将分别展示两种方法写入数据的示例。 注意:在写入数据时,为了防止SQL注入,应使用参数化查询。 步骤详解: 方法一:使用pymysql 1. 安装pymysql: `pip install pymysql` 2. 连接数据库 3. 创建游标 4. 执行INSERT语句 5. 提交 6. 关闭 方法二:使用sqlalchemy的create_engine执行原生SQL(需要同时安装sqlalchemy和pymysql) 1. 安装:`pip install sqlalchemy pymysql` 2. 创建引擎 3. 获取连接,然后创建游标(或者使用连接对象的execute方法,但更常见的还是用游标) 但是,sqlalchemy通常用于ORM,如果只是执行原生SQL,使用pymysql更直接。不过,为了展示两种方式,我们都会写。 根据引用[1],推荐使用pymysql,因为它是纯Python的库,安装方便。 我们以向一个名为`users`的表插入数据为例,表结构假设为: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) ); 示例数据:('Alice', 'alice@example.com') 方法一代码:</think>### Python 连接并写入 MySQL 数据库的方法 #### 方法一:使用 pymysql 库(推荐) 这是最常用的纯 Python 实现方法,安装简单且兼容性好。 1. **安装库**: ```bash pip install pymysql ``` 2. **连接与写入示例**: ```python import pymysql # 1. 建立数据库连接 conn = pymysql.connect( host='localhost', # 数据库地址 user='root', # 用户名 password='your_password', # 密码 database='your_db', # 数据库名 port=3306, # 端口(默认3306) charset='utf8mb4' # 编码 ) try: # 2. 创建游标对象 with conn.cursor() as cursor: # 3. 编写SQL语句(使用参数化查询防止SQL注入) sql = "INSERT INTO users (name, email) VALUES (%s, %s)" # 4. 执行写入操作(单条数据) cursor.execute(sql, ('张三', 'zhangsan@example.com')) # 批量写入示例 data = [('李四', 'lisi@example.com'), ('王五', 'wangwu@example.com')] cursor.executemany(sql, data) # 5. 提交事务(重要!) conn.commit() print("数据写入成功!") except Exception as e: # 出错时回滚 conn.rollback() print(f"写入失败: {e}") finally: # 6. 关闭连接 conn.close() ``` #### 方法二:使用 SQLAlchemy(适合复杂项目) 提供 ORM 支持,适合大型项目或需要数据库抽象层的场景。 1. **安装库**: ```bash pip install sqlalchemy pymysql ``` 2. **连接与写入示例**: ```python from sqlalchemy import create_engine, text # 1. 创建数据库引擎(格式:dialect+driver://user:password@host/dbname) engine = create_engine('mysql+pymysql://root:your_password@localhost/your_db?charset=utf8mb4') # 2. 建立连接并写入 with engine.connect() as conn: # 单条写入 conn.execute(text(""" INSERT INTO users (name, email) VALUES (:name, :email) """), {'name': '赵六', 'email': 'zhaoliu@example.com'}) # 批量写入 users_data = [ {'name': '孙七', 'email': 'sunqi@example.com'}, {'name': '周八', 'email': 'zhouba@example.com'} ] conn.execute(text(""" INSERT INTO users (name, email) VALUES (:name, :email) """), users_data) conn.commit() print("数据写入完成!") ``` #### 关键注意事项 1. **参数化查询**:务必使用 `%s` 占位符(pymysql)或命名参数(SQLAlchemy)传递值,避免 SQL 注入攻击 2. **事务提交**:执行写操作后必须调用 `commit()`,否则数据不会持久化[^1] 3. **字符编码**:建议使用 `utf8mb4` 支持完整的 Unicode(包括 Emoji) 4. **连接关闭**:使用 `with` 上下文管理器或 `finally` 块确保连接关闭 5. **错误处理**:捕获 `pymysql.Error` 或 `SQLAlchemy` 异常并回滚事务 > 提示:测试连接可用性:`conn.ping(reconnect=True)` 可检查连接状态并自动重连[^4] ### 常见问题解决 - **连接拒绝**:检查 MySQL 服务状态和用户权限 - **编码乱码**:确保数据库、表和连接都使用 `utf8mb4` - **超时断开**:在连接参数中添加 `connect_timeout=30`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值