sqlalchemy exists 子查询_【S01E04】SQLAlchemy+pandas读写数据库(mysql示例)

I.    sqlalchemy创建mysql连接

II.   pd.read_sql()

III.  df.to_sql()

I. sqlalchemy创建mysql连接

create_engine(*args, **kwargs)    

标准调用方式是将URL作为第一个位置参数
形如``dialect[+driver]://user:password@host/dbname[?key=value..]``

dialect    数据库类型, 如'mysql', 'oracle'
driver     DBAPI的名字, 如'mysqlconnector', 'pymysql' 
           (安装第一个库: pip install mysql-connector-python)
user       用户名, 一般为root
password   密码
host       IP, 本地连接的话为'localhost'
dbname     要连接的数据库的名字

举个例子:

v2-9f380ec7c0acd08c31afc3b73408d584_b.jpg

II. pd.read_sql()

v2-80a69c9d588819dc3efc50b5b9b88a64_b.jpg

这个方法其实是read_sql_query和read_sql_table的封装,read_sql()根据输入选择不同的方法执行。

重点参数

sql  表名或查询语句

con  数据库连接对象, 对于sqlalchemy来说是Engine对象


一般参数

index_col     用作索引的一列或多列
              字符串或字符串的列表, 可选, 默认为None.

coerce_float  尝试把非字符串, 非数值的对象(如decimal.Decimal)转换为浮点数

parse_dates   list或dict, 默认为None
              - 要解析为日期的列名列表
              - {column_name: format string}格式的字典, 其中format string是在解析
                字符串时间时兼容的strftime, 或者是在解析整数时间戳时, 
                (D, s, ns, ms, us)的其中之一       
              - {column_name: arg dict}格式的字典, 其中arg dict对应到函数
                `pandas.to_datetime`的关键字参数
               
columns       从SQL表中选取的列名的列表
              列表, 默认为None

chunksize     如果指定, 则返回一个迭代器, 'chunksize'是每个块(chunk)中包含的行数,
              整型, 默认为None

需要注意的是, 时间戳只会被转化为UTC, 而不是我们当地的日期和时间, 
所以我们需要手动加上8小时

上面的例子是读取本地数据库, 下面再写一个远程读取:

v2-2992609ec6361eae6baf1e7337bd4434_b.jpg

需要注意的是, 这里时间戳只会被转化为UTC, 而不是我们当地的日期和时间(即UTC+8), 所以我们需要手动加上8小时

v2-00e4671a8d831b7ed15809b5356a104f_b.jpg

III. df.to_sql()

v2-4e2c2c5469c050486ac5d1218dc566c3_b.jpg

将存储在DataFrame中的记录写入SQL数据库。支持所有SQLAlchemy支持的数据库, 可以新创建(create)一个表, 也可以附加(append), 或者覆写(overwrite)原有的表

to_sql(self, name, con, schema=None, if_exists='fail', index=True, index_label=None, 
       chunksize=None, dtype=None, method=None)

重点参数

name       SQL表的表名, 字符串

con        sqlalchemy.engine.Engine 或 sqlite3.Connection
           使用SQLAlchemy可以使用该库支持的任何数据库

schema     数据库的名字, 可选, 默认为None, 如果不填, 将使用默认的schema



一般参数

if_exists: 如果表已经存在, 如何操作, {'fail', 'replace', 'append'}中的一种, 默认为'fail'
           * fail: 引发ValueError
           * replace: 在插入新值之前删除表
           * append: 将新值插入到现有表

index      将DataFrame的index索引写为一列, 使用'index_label'作为表中的列名. 
           bool型, 默认为True

index_label  索引列的列标签. 字符串或序列, 默认为None
             * 如果index_label为None, 同时index为True, 那么索引名将被使用(index names)
             * 如果DataFrame使用MultiIndex, 则应该给出一个序列

chunksize    行将按指定的大小分批次写入. 整型, 可选, 默认为None
             默认一次性写入所有行

dtype        指定列的数据类型. dict类型, 可选, 默认为None
             字典的键为columns names, 字典的值为SQLAlchemy types或
             strings for the sqlite3 legacy mode

method       控制SQL插入子句的使用, {None, 'multi', callable}中的一个, 默认为None
             * None: 使用标准的SQL'INSERT'子句(每行一个)
             * 'multi': 在单个'INSERT'子句内传递多个值
             * 带'(pd_table, conn, keys, data_iter)'签名的可调用对象 

还是举例说明

v2-3980808a471d3960007aa1064e0770f9_b.jpg

v2-751c6e982ea7b9d5c1d3e013c1eb65f0_b.jpg

v2-de20ebb76209a642e78c5dc6f7dd8bc9_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值