精华内容
下载资源
问答
  • pandas 写入mysql数据库.to_sql方法详解

    千次阅读 2020-11-22 10:29:08
    pandas 写入mysql数据库.to_sql方法详解 DataFrame.to_sql(self,name,con,schema=None,if_exists=’fail’,index=True,index_label=None,chunksize=None,dtype=None,method=None) 再官方文档中已经详细描述to_...

    pandas 写入mysql数据库.to_sql方法详解

    DataFrame.to_sql(selfnameconschema=Noneif_exists=’fail’index=Trueindex_label=Nonechunksize=None,dtype=Nonemethod=None)

     

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

    .to_sql()方法的定义:

    def to_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

    固定语法:

    from sqlalchemy import create_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()才能使用

    固定语法:

    import pymysql
    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’] 可以选择合适的类型与数据库对应

    示例:
    from sqlalchemy.types import DATE,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值调小。

     

    展开全文
  • python的to_sql那点儿事

    千次阅读 2020-08-20 14:18:14
    文章目录to_sql结论项目需求代码比对优劣对比 to_sql结论 可以对齐字段(dataframe的columns和数据库字段一一对齐) 可以缺少字段(dataframe的columns可以比数据库字段少) 不可以多出字段,会报错 if_exists='...

    to_sql结论

    • 可以对齐字段(dataframe的columns和数据库字段一一对齐)
    • 可以缺少字段(dataframe的columns可以比数据库字段少)
    • 不可以多出字段,会报错
    • if_exists='append’进行新增(bug:如果设置了PK,ignore 和 replace会报错)
    • 一定要先创建好数据库,设置好格式,
    • 否则使用if_exists='append’自动创建的字段格式乱七八糟

    项目需求

    • excel表格按字段存入数据库,近几年的excel表格,业务系统几经迭代
    • 所以每张表格的字段顺序不一致,甚至有的字段已经不需要剔除了

    我本以为python的to_sql是按顺序一一映射进mysql里,

    于是便有了下面这篇特憨的一篇的文章:

    Python:dataframe写入mysql时候,如何对齐DataFrame的columns和SQL的字段名?

    当时找遍了百度、CSDN都没找到解决办法,

    偶然间灵感乍现的思路,还以为自己开创了先河

    现在想想当时多么自豪,现在就有多羞愧!

    不过几经迭代,倒也帮我解决了to_sql不能 ignore和replace的问题

    代码比对

    to_sql代码

    #构建数据库连接
    engine=create_engine(f'mysql+pymysql://{user}:{passwd}@{host}:3306/{db}')
    
    #可以对齐字段,以及缺少字段;不可以增加字段
    data.to_sql(sql_name,engine,index=False,if_exists='append')
    

    自定义w_sql (迭代后版本)

    # 定义写入数据库函数
    def w_sql(sql_name,data,db_name,host=host,user=user,passwd=passwd):
        zd=""
        for j in data.columns:
            zd=zd+j+","
        
        connent = pymysql.connect(host=host, user=user, passwd=passwd, db=db_name, charset='utf8mb4') #连接数据库 
        cursor = connent.cursor()#创建游标
        for i in data.values:
            va=""
            for j in i:
                if pd.isnull(j):
                    va=va+","+'null' #缺失值判断和转换
                else:
                    va=va+","+'"'+str(j)+'"'
    #         sql=u"""insert ignore into %s (%s) values(%s)"""%(sql_name,zd[:-1],va[1:])
            sql=u"""replace into %s (%s) values(%s)"""%(sql_name,zd[:-1],va[1:])
            cursor.execute(sql)
            
        connent.commit() #提交事务
        cursor.close()#关闭游标
        connent.close()#断开连接
    

    优劣对比

    对比项to_sql自定义w_sql
    运行速度整表写入,运行速度快一行行写入,运行速度特慢
    新表创建提前创建(格式问题,函数本身可以创建)提前创建
    字段对齐可以对齐可以对齐
    字段多余报错警示报错警示
    主键处理不可以ignore可以ignore
    数据修改不可以修改replace替换

    运行速度慢可以说是这个自定义函数唯一也是最大,甚至于说致命的劣势!

    这也是我为什么会发现我这么憨的原因

    毕竟自从有了这个自定义函数,以往都是无往而不利的,

    基本上没在使用过to_sql

    如果不是碰到了那个她

    一个上百万行的excel文件

    我恐怕这辈子都不会发现 to_sql的秘密

    庆幸的是相比去年多少进步了点儿,知道测试了,不只是凭感觉了

    总的来说,自定义的sql写入语句更灵活,但是相对于to_sql官方函数来说效率比较低下,如果参考下源码,或许可以优化下效率问题,如果有更好的想法,欢迎评论交流!

    展开全文
  • pandas DataFrame.to_sql() 用法

    万次阅读 多人点赞 2019-04-22 11:08:57
    pandas DataFrame.to_sql() 用法 to_sql() 的语法如下: # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html DataFrame.to_sql(name, con, schema=None, if_exists='...

    to_sql() 的语法如下:

    # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
    
    DataFrame.to_sql(name, con, schema=None, 
    if_exists='fail', index=True, index_label=None, 
    chunksize=None, dtype=None, method=None)
    

    我们从一个简单的例子开始。在 mysql 数据库中有一个 emp_data 表,假设我们使用 pandas DataFrame ,将数据拷贝到另外一个新表 emp_backup

    import pandas as pd
    from sqlalchemy import create_engine
    import sqlalchemy
    
    engine = create_engine('mysql+pymysql://user:password@localhost/stonetest?charset=utf8')
    df = pd.read_sql('emp_master', engine)
    df.to_sql('emp_backup', engine)
    

    使用 mysql 的 describe 命令比较 emp_master 表和 emp_backup 表结构:

    mysql> describe emp_master;
    +----------------+-------------+------+-----+---------+-------+
    | Field          | Type        | Null | Key | Default | Extra |
    +----------------+-------------+------+-----+---------+-------+
    | EMP_ID         | int(11)     | NO   | PRI | NULL    |       |
    | GENDER         | varchar(10) | YES  |     | NULL    |       |
    | AGE            | int(11)     | YES  |     | NULL    |       |
    | EMAIL          | varchar(50) | YES  |     | NULL    |       |
    | PHONE_NR       | varchar(20) | YES  |     | NULL    |       |
    | EDUCATION      | varchar(20) | YES  |     | NULL    |       |
    | MARITAL_STAT   | varchar(20) | YES  |     | NULL    |       |
    | NR_OF_CHILDREN | int(11)     | YES  |     | NULL    |       |
    +----------------+-------------+------+-----+---------+-------+
    8 rows in set (0.00 sec)
    

    emp_backup 表结构:

    mysql> describe emp_backup;
    +----------------+------------+------+-----+---------+-------+
    | Field          | Type       | Null | Key | Default | Extra |
    +----------------+------------+------+-----+---------+-------+
    | index          | bigint(20) | YES  | MUL | NULL    |       |
    | EMP_ID         | bigint(20) | YES  |     | NULL    |       |
    | GENDER         | text       | YES  |     | NULL    |       |
    | AGE            | bigint(20) | YES  |     | NULL    |       |
    | EMAIL          | text       | YES  |     | NULL    |       |
    | PHONE_NR       | text       | YES  |     | NULL    |       |
    | EDUCATION      | text       | YES  |     | NULL    |       |
    | MARITAL_STAT   | text       | YES  |     | NULL    |       |
    | NR_OF_CHILDREN | bigint(20) | YES  |     | NULL    |       |
    +----------------+------------+------+-----+---------+-------+
    9 rows in set (0.00 sec)
    

    我们发现,to_sql() 并没有考虑将 emp_master 表字段的数据类型同步到目标表,而是简单的区分数字型和字符型,这是第一个问题,第二个问题呢,目标表没有 primary key。因为 pandas 定位是数据分析工具,数据源可以来自 CSV 这种文本型文件,本身是没有严格数据类型的。而且,pandas 数据 to_excel() 或者to_sql() 只是方便数据存放到不同的目的地,本身也不是一个数据库升迁工具。

    但如果我们需要严格保留原表字段的数据类型,以及同步 primary key,该怎么做呢?

    使用 SQL 语句来创建表结构

    如果数据源本身是来自数据库,通过脚本操作是比较方便的。如果数据源是来自 CSV 之类的文本文件,可以手写 SQL 语句或者利用 pandas get_schema() 方法,如下例:

    import sqlalchemy
    
    print(pd.io.sql.get_schema(df, 'emp_backup', keys='EMP_ID', 
       dtype={'EMP_ID': sqlalchemy.types.BigInteger(),
           'GENDER': sqlalchemy.types.String(length=20),
           'AGE': sqlalchemy.types.BigInteger(),
           'EMAIL':  sqlalchemy.types.String(length=50),
           'PHONE_NR':  sqlalchemy.types.String(length=50),
           'EDUCATION':  sqlalchemy.types.String(length=50),
           'MARITAL_STAT':  sqlalchemy.types.String(length=50),
           'NR_OF_CHILDREN': sqlalchemy.types.BigInteger()
           }, con=engine))
    

    get_schema()并不是一个公开的方法,没有文档可以查看。生成的 SQL 语句如下:

    CREATE TABLE emp_backup (
            `EMP_ID` BIGINT NOT NULL AUTO_INCREMENT,
            `GENDER` VARCHAR(20),
            `AGE` BIGINT,
            `EMAIL` VARCHAR(50),
            `PHONE_NR` VARCHAR(50),
            `EDUCATION` VARCHAR(50),
            `MARITAL_STAT` VARCHAR(50),
            `NR_OF_CHILDREN` BIGINT,
            CONSTRAINT emp_pk PRIMARY KEY (`EMP_ID`)
    )
    

    to_sql() 方法使用 append 方式插入数据

    to_sql() 方法的 if_exists 参数用于当目标表已经存在时的处理方式,默认是 fail,即目标表存在就失败,另外两个选项是 replace 表示替代原表,即删除再创建,append 选项仅添加数据。使用 append 可以达到目的。

    import pandas as pd
    from sqlalchemy import create_engine
    import sqlalchemy
    
    engine = create_engine('mysql+pymysql://user:password@localhost/stonetest?charset=utf8')
    df = pd.read_sql('emp_master', engine)
    # make sure emp_master_backup table has been created
    # so the table schema is what we want
    df.to_sql('emp_backup', engine, index=False, if_exists='append')
    

    也可以在 to_sql() 方法中,通过 dtype 参数指定字段的类型,然后在 mysql 中 通过 alter table 命令将字段 EMP_ID 变成 primary key。

    df.to_sql('emp_backup', engine, if_exists='replace', index=False,
              dtype={'EMP_ID': sqlalchemy.types.BigInteger(),
                     'GENDER': sqlalchemy.types.String(length=20),
                     'AGE': sqlalchemy.types.BigInteger(),
                     'EMAIL':  sqlalchemy.types.String(length=50),
                     'PHONE_NR':  sqlalchemy.types.String(length=50),
                     'EDUCATION':  sqlalchemy.types.String(length=50),
                     'MARITAL_STAT':  sqlalchemy.types.String(length=50),
                     'NR_OF_CHILDREN': sqlalchemy.types.BigInteger()
                     })
    
    with engine.connect() as con:
        con.execute('ALTER TABLE emp_backup ADD PRIMARY KEY (`EMP_ID`);')
    

    当然,如果数据源本身就是 mysql,当然不用大费周章来创建数据表的结构,直接使用 create table like xxx 就行。以下代码展示了这种用法:

    import pandas as pd 
    from sqlalchemy import create_engine
    
    engine = create_engine('mysql+pymysql://user:password@localhost/stonetest?charset=utf8')
    df = pd.read_sql('emp_master', engine)
    
    # Copy table structure
    with engine.connect() as con:
        con.execute('DROP TABLE if exists emp_backup')
        con.execute('CREATE TABLE emp_backup LIKE emp_master;')
    
    df.to_sql('emp_backup', engine, index=False, if_exists='append')
    
    展开全文
  • 使用Pandas包 对数据进行处理 参考来源:... 利用pandas对MySQL中的数据进行读写: 用到了 read_sql 以及 to_sql函数 import mysql.connector import pandas as pd from sqlalchemy import creat...

    使用Pandas包 对数据进行处理
    参考来源:https://blog.csdn.net/lzw2016/article/details/84720433

    利用pandas对MySQL中的数据进行读写:

    用到了 read_sql 以及 to_sql函数

    import mysql.connector
    import pandas as pd
    from sqlalchemy import create_engine
    
    
    # 创建连接
    mydb = mysql.connector.connect(user=用户名, password=密码)
    
    # 建立游标
    mycursor = mydb.cursor()
    
    # 使用 data_test 数据库
    mycursor.execute("USE data_test")
    
    # --------------------------------------------------------------------------------------
    # 读 数据库中的数据
    data = pd.read_sql("SELECT file_version,station_id FROM wind_hobs_basic", con=mydb)
    
    print(data)
    
    # 关闭游标
    mycursor.close()
    # 关闭连接
    mydb.close()
    
    # --------------------------------------------------------------------------------------
    # 向 数据库 写数据
    engine = create_engine('mysql+mysqlconnector://root:qianqijs@127.0.0.1:3306/data_test')
    
    con = engine.connect()
    
    # 创建一个 dataframe格式 数据
    df_data = pd.DataFrame([[1.2, '54513', 116.47, 39.8069, 31.3, 'LC']], columns=['file_version', 'station_id', 'lon', 'lat', 'alt', 'radar_type'])
    
    # 写入数据库,如果已存在该表,则追加写入数据,不加索引
    df_data.to_sql(name="表名", con=con, if_exists='append', index=False)
    
    con.close()
    
    展开全文
  • python3 pandas to_sql填坑

    万次阅读 多人点赞 2019-02-28 10:54:09
    今天在使用pandas的to_sql方法时,遇到一堆问题,各种百度谷歌,真正靠谱的答案少之又少,真不知道那些文章的作者有没有运行过他文章中的代码???特在此做一个梳理。 打个广告,想学JAVA爬虫的朋友点这里 为什么...
  • pandas.DataFrame.to_sql的使用方法

    千次阅读 2019-10-17 21:23:44
    df.to_sql(name='my_balance', con=engine ,if_exists='append',index=True) #,index=False, index_label='id' 返回: $ C:\\Users\\vv\\AppData\\Local\\Programs\\Python\\Python37\\python.exe c:\\Users\\...
  • 关注点: ...to_sql相关参数 版本信息: Python 3.6 pandas 0.24.2 postgresql 11 数据库连接创建 不能用psycopg2.connect,需要用create_engine 参考文档 engine = create_engine('postgres://' ...
  • pandas to_sql填坑

    千次阅读 2019-09-29 10:30:38
    pandas作为数据分析的重要工具,经常性的与数据库进行连接,在将dataframe保存到数据库时,会用到to_sql,虽然to_sql函数可以直接将字典数据直接存入数据库,但是,to_sql限制是非常之大的。 来看一下下面的代码 ...
  • Python 使用to_sql()方法DataFrame数据存入MySQL数据库 作者:Irain QQ:2573396010 微信:18802080892 1 引用包: import pandas from sqlalchemy import create_engine 2 pandas.read_excel获取数据: data = ...
  • pandas中的io.sql.to_sql实现导入数据库

    千次阅读 2020-05-10 23:29:41
    通过pandas中的io.sql.to_sql实现导入数据库 mysql+pymysql://用户名:密码@数据库地址/数据库名?charset=utf8’ import pandas as pd import sqlalchemy as sqla import pymysql import time def pandas_i
  • 3.if_exists:有三个可选项: ①None(如果表已存在,则不做任何事) ② append(如果表存在,则往表后添加数据,如果表中有索引约束、外键之类的 一定要注意传入数据是否可行,无法从to_sql来控制数据库的约束级别) ...
  • #不设置to_sql的方法,设置写入类型 df . to_sql ( t_name , con = engine , if_exists = 'append' , index = False , index_label = None , dtype = dtyp ) #关闭引擎 engine . dispose ( )
  • pd.to_sql()知道这些就够用了

    万次阅读 2019-01-22 21:45:16
    to_sql 参见pandas.to_sql函数,主要有以下几个参数: name: 输出的表名 con: 与read_sql中相同,数据库链接 if_exits: 三个模式:fail,若表存在,则不输出;replace:若表存在,覆盖原来表里的数据;append:若...
  • Pandas高效率插入数据(to_sql进阶用法)

    千次阅读 2020-03-17 15:20:18
    设置create_engine参数:fast_executemany=True,可以提高tosql效率N倍(自己测试七十万条数据插入,设置fast_executemany后的时间仅需两分钟左右,未设置之前跑了一个多小时都没跑完被我手动结束) connection_string ...
  • pandas to_sql插入过慢

    千次阅读 2019-06-26 15:50:41
    插入时指定dtype,一般为varchar,长度写大一点 def set_d_type_dict(df): type_dict = {} ...df.to_sql('table_name', engine, if_exists='append', index=False, dtype=d_type) 参考: ...
  • 最近做一个Django web的项目要把爬取的一些数据存入MySQL中,数据保存为csv格式,想到pandas中有to_sql这个方法,就采用它了 准备:连接MySQL数据库所需的第三方包pymysql、sqlalchemy(pip安装即可) 实现 from ...
  • 在数据分析并存储到数据库时,Python的Pandas包提供了to_sql 方法使存储的过程更为便捷,但如果在使用to_sql方法前不在数据库建好相对应的表,to_sql则会默认为你创建一个新表,这时新表的列类型可能并不是你期望的...
  • pandas to_sql 浅析

    千次阅读 2018-07-30 16:21:51
    pandas to_sql 官方解释方法应用 to_sql(name, con, flavor=None, schema=None, if_exists=’fail’, index=True, index_label=None, chunksize=None, dtype=None) 这里的con 跟 read_sql con 是不同的 这里...
  • pd的io中的sqlto_sql方法 导入mysql

    万次阅读 2018-10-07 11:07:58
    利用pd的io中的sqlto_sql方法进行导入(记住不是pd的to_sql) 4: conn.dispose() 关闭连接 create_engine参数说明: (mysql+mysqldb://用户名:密码@localhost:端口/数据库名?编码)? ? 设置数据库...
  • Python:dataframe.to_sql和dataframe.read_sql

    千次阅读 2017-09-25 14:53:12
    从此,就可以用dataframe.to_sql和df.read_sql了。 df.to_sql('t_trade_record',engine,index=False,if_exists= xxx ) 一定要注意的是指定,if_exists! 千万要小心,是replace,还是append! ...
  • 解决办法如下: 创建一个表,说明数据 # name和id同时作为primary key ...to_sql ( 'grade' , engine , index = False , if_exists = 'append' ) #append或者replace 大功告成
  • pandas之to_sql

    千次阅读 2018-07-19 20:54:01
    python3.6,在使用pandas处理dataframe,写入数据库用了to_sql,数据库的连接不能使用pymysql的connect。于是选择了sqlalchemy得create_engine。 在data.to_sql("mytable",conn,index=False)的时候提示没有...
  • mysql_tzinfo_to_sql使用事项

    千次阅读 2018-07-10 14:22:46
    需要先进入数据库的bin文件下,不然会报错 导入时区信息到MYSQL中 mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p密码 mysql
  • python pandas to_sql 的用法

    万次阅读 2017-10-11 16:43:50
    网上使用pymysql或者MySQLdb,只能说是错误的,文档里边提供了说明...所以pandasto_sql的用法如下: import pandas as pd from sqlalchemy import create_engine conn = create_engine('mysql+mysqldb://root:...
  • 掌握了利用pandas中的to_sql函数将csv文件存储到MySQL数据库中.具体方法如下:首先,在数据库中建立表格,这里是使用数据库操作语言,并非python.CREATE TABLE cars ( 1 bigint(20) DEFAULT NULL, 0 bigint(20) ...
  • 嫌pandas的to_sql方法过慢?神方法让你一分钟搞定

    万次阅读 热门讨论 2017-06-08 11:22:01
    本来50万条数据,使用pd.tosql方法,设置chunksize=2000,跑了5个小时。 而上面这个方法,插40万条数据,只需1分钟。
  • python pandas to_sql 中文乱码问题

    千次阅读 2017-10-12 09:28:32
    使用DataFrame.to_sql,出现中文乱码的问题 conn = create_engine('mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8')  解决不了中文问题 我碰到的原因是因为数据库的默认编码...
  • 利用pd的io中的sqlto_sql方法进行导入(记住不是pd的to_sql) 4: conn.dispose() 关闭连接 create_engine参数说明: (mysql+mysqldb://用户名:密码@localhost:端口/数据库名?编码) 设置数据库的编码方式,可以...
  • 问题: Python中生成的Dataframe通过df.to_sql导入数据库,但由于在数据库中新建表的数据类型不符合sql查询要求,需要更改。 DataFrame.to_sql 官方文档: ...
  • 那些年我们在python掉进的坑系列之一pandas的to_sql

    万次阅读 热门讨论 2017-06-07 09:29:54
    但是,使用to_sql这个函数有一个问题,虽然to_sql函数可以直接将字典数据直接存入数据库,但是,to_sql限制是非常之大的(毕竟别人写的类) 我们先看一个操作 import pandas as pd import pymysql ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,034,852
精华内容 413,940
关键字:

to_sql