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 要连接的数据库的名字
举个例子:
II. pd.read_sql()
这个方法其实是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小时
上面的例子是读取本地数据库, 下面再写一个远程读取:
需要注意的是, 这里时间戳只会被转化为UTC, 而不是我们当地的日期和时间(即UTC+8), 所以我们需要手动加上8小时
III. df.to_sql()
将存储在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)'签名的可调用对象
还是举例说明