Pandas处理MySQL数据

背景知识视频教程

  • Pandas操作数据
  • Python中使用Pandas教程
  • MySQL进行数据分析-SQL初学者数据库

使用pyodbc

我们将使用sakila数据库,MYSQL的示例。

借助pyodbc库(您也可以使用MYSQLDB库),我们可以创建到数据库的连接字符串:

#Connection to MYSQL Server
import pyodbc 

mydb = pyodbc.connect("DRIVER={MySQL ODBC 8.0 ANSI Driver}; SERVER=localhost; PORT=3306;DATABASE=sakila; UID=root; PASSWORD=12345;")

注意:要使用PYODBC库,您需要为使用的数据库系统安装一个有效的ODBC连接器。

我们可以做的整洁的事情之一是使用python格式化功能,通过提示用户输入用户名和密码来为连接字符串提供参数-避免显式输入密码:

user = input('Provide user: \n')
pwd = input('Provide password: \n')
mydb = pyodbc.connect("DRIVER={MySQL ODBC 8.0 ANSI Driver}; SERVER=localhost; PORT=3306;DATABASE=sakila; UID=%s; PASSWORD=%s;" % (user, pwd))

注意,user和pwd将如何替换连接字符串中的%s,使其等效于第一个示例。

要使用pyodbc查询数据库,只需创建一个游标并执行所需的任何查询。 在示例中,我们将从电影数据库中选择“标题和发行年份”(无需显式数据库名称,因为我们在连接中仅与之连接):

cursor = mydb.cursor()
cursor.execute('select title, release_year from film')

在运行查询之后,我们可以使用以下方法获得结果:

cursor.fetchall()

但是有一个警告,cursor.fetchall()返回Python列表,而不是存储表格数据的最有效/用户友好的方法。

#Movie name and title returning from query list
[('ACADEMY DINOSAUR', 2006),
 ('ACE GOLDFINGER', 2006),
 ('ADAPTATION HOLES', 2006),
 ('AFFAIR PREJUDICE', 2006),
 ('AFRICAN EGG', 2006)]

我们可以使用以下命令将此对象转换为pandas DataFrame(df):

movies_release_year = pd.DataFrame([tuple(t) for t in cursor.fetchall()])

如果检查Movies_release_year的dataframe,则该对象看起来很奇怪,因为它没有有关该表的列名或其他元数据。

幸运的是,pandas为我们提供了一种在基础查询中将SQL表转换为DataFrames的巧妙方法-输入pandas read_sql_query方法:

movies_release_year = pd.read_sql_query('select title, release_year from film', mydb)

如果您使用movies_release_year.columns和movies_release_year.index检查movies_release_year的对象元数据,则会得到以下输出:

#For columns
Index(['title', 'release_year'], dtype='object')
#For row indexes
RangeIndex(start=0, stop=1000, step=1)

现在,列名正确显示,我们可以从对象数据框中使用movies_release_year [“ title”]或movies_release_year.title来调用它们。SQL等效于“select title from film”,但是行索引有些麻烦,自然,我们的查询没有读取“主键/索引”。 Pandas dataframe索引函数类似于SQL表索引,并且要显式索引的列,我们可以简单地将参数传递给read_sql_query:

movies_release_year = pd.read_sql_query('select film_id, title, release_year from film', mydb, index_col = 'title')

使用Pandas将MySQL数据库加载到BigQuery中

使用Flask将Pandas dataframe(MySQL数据)转换为CSV

加快批量插入数据库的速度

Pickle MySQL表数据

使用SQLAlchemy将Pandas连接到数据库

使用Pandas展平JSON请求

详情参阅http://viadean.com/pandas_do_mysql.html

你可能感兴趣的:(Python,数据库)