精华内容
下载资源
问答
  • 尝试使用to_sql将pandas数据帧写入MySQL表。以前使用过flavor='mysql',但是将来会贬值,希望开始过渡到使用SQLAlchemy引擎。示例代码:import pandas as pdimport mysql.connectorfrom sqlalchemy import create_...

    尝试使用to_sql将pandas数据帧写入MySQL表。以前使用过flavor='mysql',但是将来会贬值,希望开始过渡到使用SQLAlchemy引擎。

    示例代码:import pandas as pd

    import mysql.connector

    from sqlalchemy import create_engine

    engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False)

    cnx = engine.raw_connection()

    data = pd.read_sql('SELECT * FROM sample_table', cnx)

    data.to_sql(name='sample_table2', con=cnx, if_exists = 'append', index=False)

    读取工作正常,但to_sql有错误:DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master

    WHERE type='table' AND name=?;': Wrong number of arguments during

    string formatting

    为什么它看起来像是在尝试使用sqlite?对于mysql,特别是mysql.connector,正确使用sqlalchemy连接是什么?

    我还尝试将引擎作为连接传入,这给了我一个引用no cursor对象的错误。data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False)

    >>AttributeError: 'Engine' object has no attribute 'cursor'

    展开全文
  • 在用to_sql写入mysql8以上版本时,需要使用mysqldb作为驱动 pymysq的使用方式 pin install pymysql 在导入pymysq使用时需要pymysql.install_as_MySQLdb()才能使用 固定语法: importpymysql pymysql.install_as_...

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

    image.png再官方文档中已经详细描述to_sql()方法使用方式

    .to_sql()方法的定义:

    defto_sql(self, name, con, schema=None, if_exists='fail', index=True,

    index_label=None, chunksize=None, dtype=None, method=None):

    """

    Write records stored in a DataFrame to a SQL database.

    Databases supported by SQLAlchemy [1]_ are supported. Tables can be

    newly created, appended to, or overwritten.

    Parameters

    ----------

    name : string

    Name of SQL table.

    con : sqlalchemy.engine.Engine or sqlite3.Connection

    Using SQLAlchemy makes it possible to use any DB supported by that

    library. Legacy support is provided for sqlite3.Connection objects.

    ....

    to_sql()方法参数解析:

    name:指定的是将输入接入数据库当做的哪个表

    con:与数据库链接的方式,推荐使用sqlalchemy的engine类型

    schema: 相应数据库的引擎,不设置则使用数据库的默认引擎,如mysql中的innodb引擎

    if_exists: 当数据库中已经存在数据表时对数据表的操作,有replace替换、append追加,fail则当表存在时提示ValueError。

    index:对DataFrame的index索引的处理,为True时索引也将作为数据写入数据表

    index_label:当上一个参数index为True时,设置写入数据表时index的列名称

    chunsize:设置整数,如20000,一次写入数据时的数据行数量,当数据量很大时,需要设置,否则会链接超时写入失败。

    dtype:写入数据表时,可以设置列的名称(The keys should be the column

    names and the values should be the SQLAlchemy types or strings for

    the sqlite3 legacy mode),需要设置时,类型需要和sqlalchemy的类型保持一致.当不设置时,to_sql生成表时会自动兼容最大的类型。

    .to_sql()参数中除 name、con必填外,可选参数index推荐使用False,同时dtype推荐不使用。

    to_sql方法当数据表不存在时创建,存在时根据if_exists参数设置的replace,append,fail时分别对应替换、追加、失败处理。

    数据库中对表的增删改,最好是在数据库层面处理,不应该由to_sql()方法设置,虽然这个方法本身可以在表不存在时增加表,但是不推荐。在数据库层面设计表,需要根据表的数据,不同的字段设计合理的存储类型,可以对表进行合理的设计和优化。to_sql()本身创建的表,浮点类型是double,整型bigint,字符类型默认兼容最大的text,虽然可以使用dtype参数设置类型,但我个人不推荐使用。还是建议在数据库中先创建合理的目标表,在根据to_sql()方法,将数据写入目标表中。

    在Python3中,需要安装sqlalchemy 和 mysql-connector、pymsyql库

    在python3中,to_sql()的con对象,是 sqlalchemy 的 engine 引擎,通过sqlalchemy的create_engine创建:有两种方式,基本格式一致,区别只是在于使用mysqldb,还是使用mysqlconnector,推荐使用mysqlconnector。

    mysqldb是python2的mysql连接库,在python3时,已经废除mysqldb,改为pymysql。在sqlachemy必须使用mysqldb驱动时,需要先导入pymysql,然后pymysql.install_as_MySQLdb()才能使用。

    sqlalchemy.create_engine()的两种方式:

    engine = create_engine('mysql+mysqldb://user:passwd@127.0.0.1/database?charset=utf8')

    engine = create_engine('mysql+mysqlconnector:// user:passwd@127.0.0.1/database?charset=utf8')

    user:passwd@127.0.0.1/database --> 格式为 用户名:密码@服务器地址/数据库名

    mysqlconnector的使用方式

    生成engine对象时,推荐使用mysqlconnector作为驱动,需要使用到sqlalchemy 和 mysql-connector 两个库,使用pip安装

    pip install sqlalchemy

    pin isntall mysql-connector

    固定语法:

    fromsqlalchemy importcreate_engine

    DB_STRING = 'mysql+mysqlconnector://user:passwd@127.0.0.1/database?charset=utf8'

    engine = create_engine(DB_STRING)

    .....

    data.to_sql('表明',con = engine,..)

    这种使用方式在mysql5.7版本以前,是没有问题,但是在mysql8版本以后,mysql8更改了密码加密方式,在使用此种方式时会提示错误。

    在用to_sql写入mysql8以上版本时,需要使用mysqldb作为驱动

    pymysq的使用方式

    pin install pymysql

    在导入pymysq使用时需要pymysql.install_as_MySQLdb()才能使用

    固定语法:

    importpymysql

    pymysql.install_as_MySQLdb()

    DB_STRING = 'mysql+mysqldb://user:passwd@127.0.0.1/db_name?charset=utf8'engine = create_engine(DB_STRING)

    生成引擎之后,可以使用DataFrame.to_sql()方法,将DataFrame数据写入数据库。这种方式本身没有问题,但是在写入数据库时会提示预警信息,不影响正常写入。

    to_sql()时对应的字段类型设置参数dtype使用方法:

    DATE,CHAR,VARCHAR…

    可以去 sqlalchemy 的官方文档查看所有的sql数据类型:

    [‘TypeEngine’, ‘TypeDecorator’, ‘UserDefinedType’, ‘INT’, ‘CHAR’, ‘VARCHAR’, ‘NCHAR’, ‘NVARCHAR’, ‘TEXT’, ‘Text’, ‘FLOAT’, ‘NUMERIC’, ‘REAL’, ‘DECIMAL’, ‘TIMESTAMP’, ‘DATETIME’, ‘CLOB’, ‘BLOB’, ‘BINARY’, ‘VARBINARY’, ‘BOOLEAN’, ‘BIGINT’, ‘SMALLINT’, ‘INTEGER’, ‘DATE’, ‘TIME’, ‘String’, ‘Integer’, ‘SmallInteger’, ‘BigInteger’, ‘Numeric’, ‘Float’, ‘DateTime’, ‘Date’, ‘Time’, ‘LargeBinary’, ‘Binary’, ‘Boolean’, ‘Unicode’, ‘Concatenable’, ‘UnicodeText’, ‘PickleType’, ‘Interval’, ‘Enum’, ‘Indexable’, ‘ARRAY’, ‘JSON’]

    可以选择合适的类型与数据库对应

    示例:

    fromsqlalchemy.types importDATE,CHAR,VARCHAR

    DTYPES = {'col_1字段名称' : DATE, 'col_2':CHAR(4),'col_3':VARCHAR(10)}

    df.to_sql(....,dtype = DTYPES)

    将写入数据表的df中,dtype 指定 根据列名对应的数据类型字段即可

    如果使用.to_sql()需要指定dtype类型时,如果数据库中不存在目标表,则相应创建;如果数据库中已经存在目标表,则设置append追加模式写入数据库时,可能会引起字段类型冲突。

    .to_sql()方法参数演示

    data = pd.DataFrame(np.random.rand(4,4),index=list('abcd'),columns=['col_1','col_2','col_3','col_4'])

    print(data)

    col_1 col_2 col_3 col_4

    a 0.526716 0.082858 0.458375 0.640027

    b 0.316326 0.122944 0.469743 0.119170

    c 0.911248 0.920943 0.120026 0.165420

    d 0.919385 0.669661 0.083722 0.227291

    将data写入数据库,如果表存在就替换,将data的index也写入数据表,写入字段名称为id_name

    data.to_sql('table_name',con='engine',chunksize=10000,if_exists='replace',index=True,index_label='id_name')

    将data写入数据库,如果表存在就追加

    data.to_sql('table_name',con='engine',chunksize=10000,if_exists='append')

    将data写入数据库,如果表存在就替换,指定col_1的字段类型为char(4)

    data.to_sql('table_name',con='engine',chunksize=10000,if_exists='replace,dtype={'col_1':CHAR(4)})

    如果data数据量大,需要设置合理的chunksize值,这和数据库缓存大小有关,

    可以设置在50000-10000,如果提示数据库连接超时错误,就将size值调小。

    展开全文
  • 我正在尝试使用以下代码将pandas数据帧写入MySQL数据库.import pandas as pdimport numpy as npfrom pandas.io import sqlimport MySQLdbdf = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1...

    我正在尝试使用以下代码将pandas数据帧写入

    MySQL数据库.

    import pandas as pd

    import numpy as np

    from pandas.io import sql

    import MySQLdb

    df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8]]).T

    db = MySQLdb.connect("192.168.56.101","nilani","123","test")

    cursor = db.cursor()

    cursor.execute("DROP TABLE IF EXISTS TEST")

    sql = """CREATE TABLE TEST (

    ID INT NOT NULL,

    COL1 CHAR(20),

    COL2 CHAR(20),

    COL3 CHAR(20))"""

    cursor.execute(sql)

    sql.write_frame(df, con=db, name='TEST', flavor='mysql')

    db.close()

    我一直在提及this问题和其他资源.我有任何方式得到以下错误.会是什么原因?

    sql.write_frame(df, con=db, name='TEST', flavor='mysql')

    AttributeError: 'str' object has no attribute 'write_frame'

    展开全文
  • I'm trying to write a Python Pandas Dataframe to a MySQL database. I realize that it's possible to use sqlalchemy for this, but I'm wondering if there is another way that may be easier, preferably alr...

    I'm trying to write a Python Pandas Dataframe to a MySQL database. I realize that it's possible to use sqlalchemy for this, but I'm wondering if there is another way that may be easier, preferably already built into Pandas. I've spent quite some time trying to do it with a For loop, but it's not realiable.

    If anyone knows of a better way, it would be greatly appreciated.

    Thanks a lot!

    解决方案

    The other option to sqlalchemy can be used to_sql but in future released will be deprecated but now in version pandas 0.18.1 documentation is still active.

    According to pandas documentation pandas.DataFrame.to_sql you can use following syntax:

    DataFrame.to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)

    you specify the con type/mode and flavor ‘mysql’, here is some description:

    con : SQLAlchemy engine or DBAPI2 connection (legacy mode)

    Using SQLAlchemy makes it possible to use any DB supported by that library. If a DBAPI2 object, only sqlite3 is supported.

    flavor : {‘sqlite’, ‘mysql’}, default ‘sqlite’ The flavor of SQL to

    use. Ignored when using SQLAlchemy engine. ‘mysql’ is deprecated and

    will be removed in future versions, but it will be further supported

    through SQLAlchemy engines.

    展开全文
  • Pandas写入数据到MySQL

    千次阅读 2017-01-25 10:51:07
    #-*- coding:utf-8 -*-from sqlalchemy import create_engineclass mysql_engine(): user='******' passwd='******' host='******' port = '******' db_name='******' engine = create_engin
  • pandas操作mysql

    2021-02-02 15:08:05
    pandas中使用sql语言 from pandasql imoport sqldf使用从pandasql包中可以导入sqldf,这是我们核心要使用的接口。它接收两个参数,第一个是合法的SQL语句。SQL具有的功能,例如聚合,条件查询,联结,where条件,子...
  • 本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写。首先我们需要了解点ORM方面的知识。ORM技术对象关系映射技术,即ORM(Object-Relational Mapping)技术,指的是把关系数据库的表结构映射到对象上,...
  • 我没有一个完整的答案,但也许我有一些建议可以帮助你。我相信您认为您的dataframe是一...在^{pr2}$这将返回整列(pandas.Series,它是numpy.ndarray),而不是单个值。因此:dataframe['yhat'].__str__()将给出整个列...
  • 【warning】 pandas 写入MySQL错误

    千次阅读 2018-08-25 23:26:45
    背景:pandas 利用sqlalchemy 存入数据到mysql  数据,有中文字符; //////////////////////////////////////////////////////针对linux//////////////////////////////////////////////////// 第一:错误码 ...
  • 编程界的小学生一枚,主要使用语言为...还有可能包括程序性能优化,以及源码的阅读等等···在荆棘的道路上逆风前行本文基于python, pandas, pymysql实现了向数据库中批量插入数据的脚本,一方面提供给被网上很多瞎...
  • 1 需要安装的包pandas,mysql-pythonsqlalchemy可以在Anaconda界面下载,或者通过pip install 来安装2创建MySQL引擎engine = create_engine(“mysql+mysqldb://user:pwd@ip/databasename”,encoding=’utf8′)user:...
  • python3 pandas读取文本写入MySQL

    千次阅读 2018-09-03 14:42:11
    import pandas as pd from sqlalchemy import create_engine pymysql.install_as_MySQLdb() name = ['id','create_time','ruuid','version','addition', 'bookname','content','dversion','...
  • 今天从pandas写入数据到mysql,报InternalError: (pymysql.err.InternalError) (1366, "Incorrect string value:……百度了一下原因,整理一下解决方法。1.首先排除普通字符编码问题input_engine = create_engine('...
  • 先看下需要存入的df数据:安装并导入需要的库:先创建数据库:开始直接一条pandas入库:入库后查看数据:注意:(1)再进行入库的时候,他会根据列自动选择类型,可能为double、float等,后面如果出现类型不匹配,就...
  • 您可以使用pymysql来完成此任务:例如,假设您有一个MySQL数据库,其中包含下一个用户、密码、主机和端口,并且您希望在数据库“data_2”中写入。import pymysqluser = 'root'passw = 'my-secret-pw-for-mysql-12ud'...
  • import mysql.connector as mysqlconnector from apscheduler.schedulers.blocking import BlockingScheduler from sqlalchemy import create_engine from sqlalchemy.types import BIGINT,VARC.
  • 最近在尝试分析骑行数据,发现电脑在执行统计分析一些维度的数据时比较...使用Python读取CSV文件并写入MySQL的方法比较多,比如使用Pandas的to_sql方法,或者读取CSV之后批量写入MySQL,而本文分享的是逐条读取&...
  • I'm trying to write a pandas dataframe to MySQL database with following code.import pandas as pdimport numpy as npfrom pandas.io import sqlimport MySQLdbdf = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3....
  • 接到朋友求助,说自己一个数据库里的某个表有大量重复数据,使用mysql语句处理的速度太...我想到了python中有一个模块pandas是专门用来处理海量数据的,马上网上查下该模块是否有相关的方法,果然,pandas里的drop_...
  • #这样的操作之后是生成了一个新表,index参数表示不把索引写到数据库。 df.to_sql('table', engine, index=False, if_exists='append')
  • pandas数据保存至Mysql数据库

    千次阅读 2019-04-03 16:47:27
    因为最近又在写爬虫,所以想把爬到的数据(dataframe格式)存在mysql里 终于在今天下午成功了 小试牛刀 注:需要你修改的部分: ...本地数据库自动新建了一个test1表,数据成功写入,(我用的mysql...
  • 我的理解是,您可以从数据库中提取数据(在本例中是MySQL),将这些数据加载到pandas df中进行操作(添加新列、SQL中不容易完成的复杂计算等),然后将新列加载回MySQL。但是,最后一步是将新创建的列添加回MySQL中的同...
  • 意义:将存入数据库的数据用来练习Mysqlpandas的运用,以及matplotlib绘图或者pyecharts 技术路线:获取数据,简单整理,存入数据库,数据库取出数据 要求:了解requests和bs4的基本使用,熟悉python的数据结构,...
  • 我有一个Pandas数据帧,我正试图使用MySQLdb和to-sql将其插入到MySQL表中。该表的主键为'allocationid',并且为autoincrement。。我希望每天都这样做,从MySQL表中删除一天之前的数据,并从Pandas dataframe中重新...
  • 使用pandasmysql的数据导入MongoDB。首先说下我的需求,我需要把mysql的70万条数据导入到mongodb并去重,同时在第二列加入一个url字段,字段的值和第三列的值一样,代码如下:# -*- coding: utf-8 -*-# @Time : ...
  • 实现的功能:通过pymysql连接MySQL数据库,查询所需数据,然后使用pandas写入到csv文件,并且写入包含数据列名。import sysimport pandas as pdimport pymysqlimport timecsv_path=sys.argv[1]host=sys.argv[2]user=...
  • 最近在编写业务系统时,要增加每种类型上百台设备,在前端web页面进行设备的增加很浪费时间,也不是很现实,只能先将设备信息在EXCEL里编辑好实现批量上传到mysql数据库中;笔者脑海中及时就想到了用pandas里的read_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,351
精华内容 1,340
关键字:

pandas写入mysql

mysql 订阅