相关疑难解决方法(0)

如何使用pyodbc从CSV加速批量插入到MS SQL Server

下面是我想要帮助的代码.我不得不运行超过1,300,000行,这意味着插入~300,000行需要40分钟.

我认为批量插入是加速它的路线?或者是因为我通过for data in reader:部分迭代行?

#Opens the prepped csv file
with open (os.path.join(newpath,outfile), 'r') as f:
    #hooks csv reader to file
    reader = csv.reader(f)
    #pulls out the columns (which match the SQL table)
    columns = next(reader)
    #trims any extra spaces
    columns = [x.strip(' ') for x in columns]
    #starts SQL statement
    query = 'bulk insert into SpikeData123({0}) values ({1})'
    #puts column names in SQL query 'query'
    query = query.format(','.join(columns), ','.join('?' * len(columns)))

    print 'Query is: %s' …
Run Code Online (Sandbox Code Playgroud)

python sql-server bulkinsert pyodbc sql-server-2012

26
推荐指数
2
解决办法
5万
查看次数

将Pandas DataFrame保存到Django模型

我有一个存储在pandas DataFrame中的股票价格数据,如下所示(实际上它在面板中,但我将其转换为DataFrame)

        date  ticker  close       tsr
0 2013-03-28  abc     22.81  1.000439
1 2013-03-28  def     94.21  1.006947
2 2013-03-28  ghi     95.84  1.014180
3 2013-03-28  jkl     31.80  1.000000
4 2013-03-28  mno     32.10  1.003125
...many more rows
Run Code Online (Sandbox Code Playgroud)

我想将它保存在Django模型中,它看起来像这样(匹配列名):

class HistoricalPrices(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    tsr = models.DecimalField()
    close = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)

我到目前为止最好的用它来保存它,其中df是我的DataFrame:

entries = []
for e in df.T.to_dict().values():
    entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来保存这个?

我看过django-pandas,但看起来它只是从数据库读取.

python django pandas

9
推荐指数
1
解决办法
7868
查看次数

加速Pandas to_sql()?

我有一个1,000,000x 50Pandas DataFrame,我目前正在使用以下方法写入SQL表:

df.to_sql('my_table', con, index=False)

这需要非常长的时间.我已经看到了关于如何在线加速这个过程的各种解释,但它们似乎都不适用于MSSQL.

  1. 如果我尝试以下方法:

    使用SQLAlchemy批量插入Pandas DataFrame

    然后我收到一个no attribute copy_from错误.

  2. 如果我尝试多线程方法:

    http://techyoubaji.blogspot.com/2015/10/speed-up-pandas-tosql-with.html

    然后我收到一个QueuePool limit of size 5 overflow 10 reach, connection timed out错误.

有没有简单的方法来加速to_sql()到MSSQL表?要么是通过BULK COPY还是其他一些方法,而是完全来自Python代码?

python sql import performance pandas

6
推荐指数
2
解决办法
4395
查看次数

如何使用并行插入语句在 MySQL 表中插入巨大的 Pandas 数据框?

我正在做一个项目,我必须编写一个包含数百万行和大约 25 列的数据框,主要是数字类型。我正在使用Pandas DataFrame to SQL Function将数据帧转储到 Mysql 表中。我发现这个函数创建了一个可以一次插入多行的 Insert 语句。这是一个很好的方法,但 MySQL 对可以使用这种方法构建的查询长度有限制。

有没有办法将它并行插入同一个表中,以便我可以加快进程?

mysql pandas pandasql

4
推荐指数
1
解决办法
2008
查看次数

psycopg2.ProgrammingError:尝试copy_from redshift时出现"stdin"错误或其附近的语法错误

当我尝试复制到AWS redshift时遇到此问题.这是我试图运行的代码:

with open('path/to/files, 'rb') as fo:
    cursor.copy_from(fo, 'schema.table', sep=',')
    cursor.commit()
Run Code Online (Sandbox Code Playgroud)

我遇到了错误:

psycopg2.ProgrammingError: syntax error at or near "stdin" 
LINE 1: ...Y schema.table FROM stdin WITH...
Run Code Online (Sandbox Code Playgroud)

我用psycopg2运行python 3.5.希望你们能帮忙!Thx提前!

postgresql stdin psycopg2 python-3.x amazon-redshift

3
推荐指数
1
解决办法
1893
查看次数

使用 SQL Server 提高 pandas 的 to_sql() 性能

我来找你是因为我无法解决pandas.DataFrame.to_sql()方法的问题。

我已经在我的脚本和数据库之间建立了连接,我可以发送查询,但实际上它对我来说太慢了。

我想找到一种方法来提高我的脚本的性能。也许有人会找到解决方案?

这是我的代码:

  engine = sqlalchemy.create_engine(con['sql']['connexion_string'])
  conn = engine.connect()
  metadata = sqlalchemy.Metadata()
  try : 
    if(con['sql']['strategy'] == 'NEW'): 
      query = sqlalchemy.Table(con['sql']['table'],metadata).delete()
      conn.execute(query)
      Sql_to_deploy.to_sql(con['sql']['table'],engine,if_exists='append',index = False,chunksize = 1000,method = 'multi')
    elif(con['sql']['strategy'] == 'APPEND'):
      Sql_to_deploy.to_sql(con['sql']['table'],engine,if_exists='append',index = False,chunksize = 1000,method = 'multi')
    else:
      pass
  except Exception as e:
    print(type(e))
Run Code Online (Sandbox Code Playgroud)

当我退出 chunksize 和方法参数时,它正在工作,而且太慢了,这一刻它太慢了(30000 行几乎需要 3 分钟)。当我输入这些参数时,我得到一个sqlalchemy.exc.ProgrammingError...

感谢您的帮助 !

python sql-server sqlalchemy pyodbc pandas

3
推荐指数
1
解决办法
6564
查看次数

使用SqlAlchemy和cx_Oracle将Pandas DataFrame写入Oracle数据库时加速to_sql()

使用pandas dataframe的to_sql方法,我可以很容易地将少量行写入oracle数据库中的表:

from sqlalchemy import create_engine
import cx_Oracle
dsn_tns = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=1521))\
       (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<servicename>)))"
pwd = input('Please type in password:')
engine = create_engine('oracle+cx_oracle://myusername:' + pwd + '@%s' % dsn_tns)
df.to_sql('test_table', engine.connect(), if_exists='replace')
Run Code Online (Sandbox Code Playgroud)

但是对于任何常规大小的数据帧(我的有60k行,不是那么大),代码变得无法使用,因为它在我愿意等待的时间内(从而超过10分钟)从未完成.我用Google搜索并搜索了几次,最接近的解决方案是ansonw这个问题中给出的答案.但那个是关于mysql,而不是oracle.正如Ziggy Eunicien指出的那样,它对甲骨文不起作用.有任何想法吗?

编辑

以下是数据框中的行示例:

id          name            premium     created_date    init_p  term_number uprate  value   score   group   action_reason
160442353   LDP: Review     1295.619617 2014-01-20  1130.75     1           7       -42 236.328243  6       pass
164623435   TRU: Referral   453.224880  2014-05-20  0.00        11          NaN     -55 38.783290   1       suppress
Run Code Online (Sandbox Code Playgroud)

这是df的数据类型:

id               int64
name             object …
Run Code Online (Sandbox Code Playgroud)

oracle performance sqlalchemy dataframe pandas

2
推荐指数
1
解决办法
6908
查看次数

使用exec使用动态逻辑修改熊猫数据框

假设我有一个脚本,该脚本从数据库中将数据读取到数据帧中,在该数据帧上运行一些逻辑,然后将结果数据帧导出到另一个数据库表中,如下所示。问题是exec函数之后,transform.py中的数据帧不会被覆盖。

注意:这是一个简单的示例,用于说明问题,而不是我尝试使用此方法解决的实际问题。

期望:

执行前

+---------+---------------+--------------+----------+
| metric  | modified_date | current_date | datediff |
+---------+---------------+--------------+----------+
| metric1 | 2019-03-31    | 2019-05-03   |       33 |
| metric2 | 2019-03-31    | 2019-05-03   |       33 |
| metric3 | 2019-03-31    | 2019-05-03   |       33 |
| metric4 | 2019-03-20    | 2019-05-03   |       44 |
+---------+---------------+--------------+----------+
Run Code Online (Sandbox Code Playgroud)

执行后

+---------+---------------+--------------+----------+
| metric  | modified_date | current_date | datediff |
+---------+---------------+--------------+----------+
| metric4 | 2019-03-20    | 2019-05-03   |       44 |
+---------+---------------+--------------+----------+
Run Code Online (Sandbox Code Playgroud)

实际:

执行前

+---------+---------------+--------------+----------+ …
Run Code Online (Sandbox Code Playgroud)

python pandas

2
推荐指数
1
解决办法
211
查看次数