利用pandas读写数据库

最近做一个使用mysql数据库的项目,数据量比较大,读起来费劲,偶然发现pandas中居然有直接读写数据库的内置函数,不禁欣喜万分又颓然失落,喜的是居然有这么方便的方法,落的是pandas用了这么久居然这都不知道......心塞。

回归正题,pandas读取数据库数据的方法如下:

pd.read_sql( sql,con,index_col = None,coerce_float = True,params = None,parse_dates = None,columns = None,chunksize = None )

 

  1. sql:string或要执行的SQL查询或表名。SQLAlchemy可选。你可以写个sql语句,也可以写个表名,然后再columns中写入你要读取的列。
  2. con:SQLAlchemy可连接(引擎/连接)或数据库字符串URI或DBAPI2连接(后备模式),使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3。
  3. index_col:字符串或字符串列表,可选,默认值:None。
  4. coerce_float:boolean,默认为True,尝试将非字符串,非数字对象(如decimal.Decimal)的值转换为浮点,这对SQL结果集很有用。
  5. params:list,tuple或dict,optional,default:None,要传递给执行方法的参数列表。
  6. parse_dates:list或dict,默认值:None,要解析为日期的列名列表。
  7. columns:list,默认值:None,从SQL表中选择的列名列表(仅在读取表时使用)。
  8. chunksize:int,默认None,如果指定,则返回一个迭代器,其中chunksize是要包含在每个块中的行数。

pandas写入数据库数据的方法如下:

def df_to_sql(df,table_name,conn,if_exists='append',dtype=None,):
    
    df.to_sql(table_name,conn,if_exists=if_exists,dtype=dtype)
    return

 

  1.     :param df: 要存的数据,dataframe格式
  2.     :param table_name: 要存的表名,如果没有会创建
  3.     :param conn: 数据库连接,同上面读取时的连接一样
  4.     :param if_exists: 如果表存在怎么操作,fail:什么也不做,replace:替换之前的表,append:在之前的表后添加
  5.     :param dtype:字典格式,key是列名,value是这一列的格式(数据库支持的格式比如char,int等),可以不选,pandas会根据数据自动给定字段类型
  6.     :param index:默认是True,产生一个从0开始的索引
  7.     :param index_label:默认为None,想要使用的索引列名称,多重索引应该给定一个序列

使用起来很简单,也很方便,记录一下

### 使用Python进行MySQL数据库读写操作 为了在Windows环境下使用Python对MySQL数据库执行读写操作,需要先安装必要的库[^1]。 #### 安装必要库 确保已安装`mysql-connector-python`以及`pandas`这两个库。可以通过命令提示符运行如下pip指令完成安装: ```bash pip install mysql-connector-python pandas ``` #### 建立连接并创建数据表 建立到MySQL服务器的安全连接至关重要。下面展示了一个简单的例子,说明怎样通过`mysql.connector.connect()`函数来实现这一点,并尝试创建一个新的表格用于后续的操作。 ```python import mysql.connector as mc from mysql.connector import errorcode try: cnx = mc.connect(user='root', password='your_password', host='localhost', database='test_db') cursor = cnx.cursor() create_table_query = ( "CREATE TABLE IF NOT EXISTS employees (" "id INT AUTO_INCREMENT PRIMARY KEY, " "name VARCHAR(50), " "position VARCHAR(50)" ");") cursor.execute(create_table_query) except mc.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("Something is wrong with your user name or password") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("Database does not exist") else: print(err) else: cnx.close() ``` #### 利用Pandas读取和写入数据 一旦建立了稳定的数据连接之后,就可以利用`pandas.read_sql()`方法轻松地查询并将结果加载成DataFrame对象;同样也可以借助于`to_sql()`方法把本地的数据帧保存回指定位置上的关系型数据库内。 ```python import pandas as pd # 读取数据 query = ("SELECT * FROM employees;") df_employees = pd.read_sql(query, con=cnx) print(df_employees.head()) # 插入新记录 new_employee_data = {'name': ['Alice'], 'position': ['Engineer']} df_new_employee = pd.DataFrame(new_employee_data) df_new_employee.to_sql(name='employees', con=cnx, if_exists='append', index=False) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值