from sqlalchemy import create_engine #执行SQL语句的包 engine = create_engine('mysql+pymysql://用户名:密码@IP:3306/db?charset=utf8') #连接mysql数据库
时间: 2024-10-09 12:01:22 浏览: 34
`from sqlalchemy import create_engine` 是用于Python中与SQL数据库交互的一个模块,它允许我们创建数据库引擎来连接到MySQL服务器。这里有两个不同的示例说明如何创建引擎:
**示例1: 更详细的连接设置**
```python
# 引入create_engine函数并创建引擎
from sqlalchemy import create_engine
# 使用完整的URL格式连接到MySQL数据库
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/test?charset=utf8", echo=True)
# "echo=True" 参数表示是否打印SQL查询,便于调试
```
**示例2: 简化版的连接**
```python
# 只显示基本连接信息
eng = create_engine("mysql+pymysql://root:123@localhost/day05?charset=utf8")
# 这里没有指定echo参数,默认可能是False,不会打印SQL查询
```
在上述代码中,`'mysql+pymysql://用户名:密码@IP:3306/db?charset=utf8'` 是一个URL格式,其中包含了数据库的相关信息,如用户名(用户名)、密码(密码)、主机地址(IP)以及数据库名(db)。`charset=utf8` 表示字符集。
相关问题
import pandas as pd from sqlalchemy import create_engine path ='F:/海量数据实训/data_new.csv' data = pd.read_csv(path) # 连接数据库 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/Mass?charset=utf8') # 获取csv文件的表头 columns = list(data.columns) # 语句 create_table = f " create table data_new({', '.join([f'{column} varchar(255)' for column in columns])})" # 执行语句 with engine.connect() as connection: connection.execute(create_table) # 将数据写入数据库中的表中 data.to_sql('data_new', con=engine, if_exists='append', index=False)
这段代码是将一个名为 data_new.csv 的 CSV 文件导入到名为 Mass 的 MySQL 数据库中。首先,使用 Pandas 库中的 read_csv() 函数将 CSV 文件读入内存。然后,使用 SQLAlchemy 库中的 create_engine() 函数连接 MySQL 数据库。接着,获取 CSV 文件的表头,构造创建表的 SQL 语句,使用 execute() 方法在 MySQL 数据库中创建表。最后,使用 to_sql() 方法将数据写入到 MySQL 数据库的 data_new 表中。如果该表已存在,则将数据追加到该表中。如果该表不存在,则新建该表。
优化代码:import pandas as pd from sqlalchemy import create_engine path ='F:/海量数据实训/data_new.csv' data = pd.read_csv(path) # 连接数据库 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/Mass?charset=utf8') # 获取csv文件的表头 columns = list(data.columns) # 语句 create_table = f " create table data_new({', '.join([f'{column} varchar(255)' for column in columns])})" # 执行语句 with engine.connect() as connection: connection.execute(create_table) # 将数据写入数据库中的表中 data.to_sql('data_new', con=engine, if_exists='append', index=False)
这段代码看起来已经很简洁了,但是可以进行进一步的优化。可以使用 try-except-finally 结构来确保连接关闭,避免因为程序异常退出而导致连接未关闭的情况。同时,可以使用 with 语句来自动关闭文件和连接等资源,增加代码的可读性和健壮性。下面是优化后的代码:
```
import pandas as pd
from sqlalchemy import create_engine
path = 'F:/海量数据实训/data_new.csv'
data = pd.read_csv(path)
# 连接数据库
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/Mass?charset=utf8')
# 获取csv文件的表头
columns = list(data.columns)
# 构造创建表的 SQL 语句
create_table = f"CREATE TABLE data_new ({', '.join([f'{column} varchar(255)' for column in columns])})"
# 执行语句
try:
with engine.connect() as connection:
connection.execute(create_table)
data.to_sql('data_new', con=engine, if_exists='append', index=False)
except Exception as e:
print(e)
finally:
engine.dispose()
```
优化后的代码使用 with 语句来自动关闭连接,避免了因程序异常退出而导致连接未关闭的情况。同时,使用 try-except-finally 结构来确保程序的健壮性,如果出现异常,会打印异常信息。最后,使用 engine.dispose() 方法来关闭连接。
阅读全文