要使用Python连接MySQL并操作数据,通常会使用pymysql
或mysql-connector-python
这样的库。
使用pymysql
库来连接MySQL、读取表并按照某个关系将它们连接起来。
1、安装必要的库:
pip install pymysql pandas
2、连接MySQL并读取数据:
import pymysql
import pandas as pd
# MySQL连接信息
host = "your_host"
port = 3306 # 默认端口
user = "your_username"
password = "your_password"
database = "your_database"
# 创建连接
connection = pymysql.connect(host=host,
port=port,
user=user,
password=password,
database=database)
# 使用pandas读取表
table1 = pd.read_sql("SELECT * FROM table_name1", connection)
table2 = pd.read_sql("SELECT * FROM table_name2", connection)
# 关闭连接
connection.close()
3、按照某个关系连接两个表:
# 假设我们要根据"column_name"这一列来连接两个表
merged_table = pd.merge(table1, table2, on="column_name", how="inner") # 这里使用的是内连接
运行出错
UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
tables = pd.read_sql(query, connection)
这个警告是因为pandas
在其read_sql
函数中更推荐使用SQLAlchemy作为连接方式。虽然pymysql
和其他DBAPI2连接通常可以工作,但SQLAlchemy提供了更多的特性和稳定性。
为了避免这个警告,并使用推荐的方法,可以使用SQLAlchemy来连接MySQL并与pandas
一起使用。
1、安装必要的库:
pip install SQLAlchemy pymysql pandas
2、使用SQLAlchemy连接MySQL并列出所有的表:
import pandas as pd
from sqlalchemy import create_engine
# MySQL连接信息
host = "your_host"
port = 3306 # 默认端口
user = "your_username"
password = "your_password"
database = "your_database"
# 使用SQLAlchemy创建连接
connection_string = f"mysql+pymysql://{user}:{password}@{host}:{port}/{database}"
engine = create_engine(connection_string)
# 使用pandas查询并获取所有表的列表
query = f"SELECT table_name FROM information_schema.tables WHERE table_schema = '{database}'"
tables = pd.read_sql(query, engine)
# 显示表列表
print(tables)
使用SQLAlchemy的create_engine
方法创建了一个连接,并将其传递给pandas
的read_sql
函数。这种方法应该不会产生上述的警告,并且是pandas
推荐的方式来从SQL数据库中读取数据。