标签: executemany

如何通过executemany()语句转换pandas数据帧以进行插入?

我有一个相当大的pandas dataframe - 50左右标题和几十万行数据 - 我希望使用该ceODBC模块将这些数据传输到数据库.以前我pyodbc在for循环中使用并使用了一个简单的execute语句,但是这个时间非常长(每10分钟1000条记录)......

我现在正在尝试一个新的模块,我正在尝试介绍,executemany()虽然我不太确定参数序列的含义是什么:

    cursor.executemany("""insert into table.name(a, b, c, d, e, f) 
values(?, ?, ?, ?, ?), sequence_of_parameters)
Run Code Online (Sandbox Code Playgroud)

它应该看起来像一个通过每个标题的常量列表

    ['asdas', '1', '2014-12-01', 'true', 'asdasd', 'asdas', '2', 
'2014-12-02', 'true', 'asfasd', 'asdfs', '3', '2014-12-03', 'false', 'asdasd']
Run Code Online (Sandbox Code Playgroud)
  • 这是三行的例子

或者需要什么格式?

作为另一个相关的问题,我怎样才能将常规的pandas数据帧转换为这种格式?

谢谢!

python database executemany pandas

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

在mysqldb中执行executemany后,是否可以获取所有的lastrowids?

我不能确定生成的ID是否是连续的,如果没有,是否还有其他方法可以获得它们?

class BaseDao(object):

    def __init__(self,pooldb):
        self.pooldb = pooldb

    def insertmany(self,sql,args):
        conn,cur = None,None
        try:
            conn = pooldb.dedicated_connection()
            cur = conn.cursor()
            num=cur.executemany(sql,args)
            if num <= 0:
                raise Exception("insert failure with num equals zero")
            lastrowid = int(cur.lastrowid)
            return [range(lastrowid - num + 1,lastrowid+1)]
        except:
            conn.rollback()
            traceback.print_exc()
            raise Exception("error happened when insert sql=%s args=%s " % (sql,str(args)))
        finally:
            if cur:
                cur.close()
            if conn:
                conn.close() 
Run Code Online (Sandbox Code Playgroud)

python mysql-python executemany

11
推荐指数
1
解决办法
2539
查看次数

SQLite3 Python:executemany SELECT

我试图使用executemany函数从一行中的所有行中获取一些WHERE约束

import sqlite3

con = sqlite3.connect('test.db')
cur = con.cursor()

cur.execute('CREATE TABLE IF NOT EXISTS Genre (id INTEGER PRIMARY KEY, genre TEXT NOT NULL)')

values = [
        (None, 'action'),
        (None, 'adventure'),
        (None, 'comedy'),
        ]


cur.executemany('INSERT INTO Genre VALUES(?, ?)', values)

ids=[1,2]

cur.executemany('SELECT * FROM Genre WHERE id=?', ids)

rows = cur.fetchall()
print rows
Run Code Online (Sandbox Code Playgroud)

错误

cur.executemany('SELECT * FROM Genre WHERE id=?', ids)
sqlite3.ProgrammingError: You cannot execute SELECT statements in executemany()
Run Code Online (Sandbox Code Playgroud)

python sqlite select executemany

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

For Loop或executemany - Python和SQLite3

我最近开始学习Python和SQL并且有一个问题.

使用Python和SQLite3我编写了以下代码:

# Use sqlite3 in the file
import sqlite3

# Create people.db if it doesn't exist or connect to it if it does exist
with sqlite3.connect("people.db") as connection:
    c = connection.cursor()

    # Create new table called people
    c.execute("""CREATE TABLE IF NOT EXISTS people(firstname TEXT, lastname TEXT, age INT, occupation TEXT)""")


    people_list = [
        ('Simon', 'Doe', 20, 'Python Master'),
        ('John', 'Doe', 50, 'Java Master'),
        ('Jane', 'Doe', 30, 'C++ Master'),
        ('Smelly', 'Doe', 2, 'Shower Master')
    ]

    # Insert dummy data into …
Run Code Online (Sandbox Code Playgroud)

python sql sqlite for-loop executemany

6
推荐指数
1
解决办法
4888
查看次数

Python + MySQLdb executemany

我正在使用Python及其MySQLdb模块将一些测量数据导入Mysql数据库.我们拥有的数据量非常高(目前大约有250 MB的csv文件,还有很多其他文件).

目前我使用cursor.execute(...)导入一些元数据.这不是问题,因为这些只有少数条目.

问题是,当我尝试使用cursor.executemany()导入更大量的实际测量数据时,MySQLdb提出了一个问题.

TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

我目前的代码是

def __insert_values(self, values):
    cursor = self.connection.cursor()
    cursor.executemany("""
        insert into values (ensg, value, sampleid)
        values (%s, %s, %s)""", values)
    cursor.close()
Run Code Online (Sandbox Code Playgroud)

where values是一个元组列表,每个元组包含三个字符串.任何想法可能有什么问题吗?

编辑:

这些值由.生成

yield (prefix + row['id'], row['value'], sample_id)
Run Code Online (Sandbox Code Playgroud)

然后一行读入一个列表,其中行为和迭代器来自csv.DictReader.

python mysql executemany

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

在python sqlite3模块中导入数据文件(如.csv)的任何其他方法?[不一一插入]

在sqlite3的客户端CLI中,有".import文件TABLE_name"来执行此操作.

但是,我现在不想在我的服务器上安装sqlite3.

在python sqlite3模块中,我们可以创建和编辑数据库.

但是,除了逐行插入行之外,我还没有找到将数据文件导入TABLE的方法.

还有其他方法吗?

python sqlite import executemany

5
推荐指数
1
解决办法
3567
查看次数

对于大量行,MySQLdb 的executemany 错误

我当前正在运行一个脚本,使用“执行多个”函数将值(元组列表)插入到 MySQL 数据库中。当我使用少量行(`1000)时,脚本运行良好。

当我使用大约 40,000 行时,我收到以下错误:

cursor.executemany( stmt, trans_frame)
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 2538, in run_code
    exec code_obj in self.user_global_ns, self.user_ns
  File "<ipython-input-1-66b44e71cf5a>", line 1, in <module>
    cursor.executemany( stmt, trans_frame)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 253, in executemany
    r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 346, in _query
    rowcount = self._do_query(q)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 310, in _do_query
    db.query(q)
OperationalError: (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

python mysql executemany

5
推荐指数
1
解决办法
7876
查看次数

MySqlDb 在插入忽略语句上抛出操作数应包含 1 列

在查看 Stack Exchange 提供的一些 websocket 方法时,我想将一些数据点保存到 MySQL 数据库中。但是,当我尝试运行命令时executemany,出现以下错误:

_mysql_exceptions.OperationalError: (1241, 'Operand should contain 1 column(s)')

在环顾四周时,我发现了许多此错误的例子,但他们已经处理了删除SELECT语句中的括号的问题。我没有使用SELECT. 我正在尝试INSERT

我的代码的一个简短的包含示例如下所示:

import MySQLdb as mdb
db = mdb.connect(host='localhost',user='myuser',db='qs',passwd='mypass',use_unicode=True,charset='utf8')
cur = db.cursor()
db_qry = """INSERT IGNORE INTO questions (id, site_base, title, body_sum, tags, last_act_dt, url, owner_url, owner, api_site) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""


parms = [(u'mathematica.stackexchange.com', 
43248, 
u'How to plot &ldquo;Normalized distance&rdquo; in this problem', 
u"Problem: there are two particles whose equationsof motion both satisfy -n Abs[x[t]]^n/x[t] == x''[t]. …
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-python executemany

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

(fast_executemany = True) 错误“[ODBC Driver 17 for SQL Server]强制转换规范的字符值无效 (0) (SQLExecute)')”

我正在使用 pyodbc 中的 (executemany) 函数将数据填充到 mssql 数据库中。这是我的代码:

def populate_database(conn):
    tuples = [
        ('2020-04-13 00:50:42', 'AirShoppingRQ', 'ALEY', '2020-05-23', '', '', 'BRU-BLQ', ''),     
        ('2020-04-13 00:50:43', 'AirShoppingRQ', 'ALEY', '2021-01-23', '', '', 'LIS-STO', '')
    ]
    query_string = 'INSERT INTO mytable VALUES (?,?,?,?,?,?,?,?)'
    cursor = conn.cursor()
    #cursor.fast_executemany = True
    cursor.executemany(query_string, tuples)
    cursor.commit()
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我取消注释该行cursor.fast_executemany = True,则会出现以下错误:

('22018', '[22018] [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification (0) (SQLExecute)')
Run Code Online (Sandbox Code Playgroud)

下面是我的表:

CREATE TABLE [dbo].[mytable](
  [field1] [datetime] NULL,
  [field2] [varchar](50) NULL,
  [field3] [varchar](20) NULL, …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc executemany

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

pyodbc从列表中插入INTO

我试图使用列表作为值的来源将数据插入Access mdb文件.

cursor.execute("select * from Components")
cursor.executemany("""
                  INSERT INTO Components
                  ([Database Number],Description, [Warehouse Code],[Supplier                            Code], Usage, Major1, Minor1)
                  VALUES (?,?,?,?,?,?,?)
                  """), input_list
cursor.commit()
Run Code Online (Sandbox Code Playgroud)

我得到错误"TypeError:function需要2个参数(给定1个)".错误是指行"""),input_list

我做错了什么?在此先感谢您的帮助.

这是input_list的打印

['7', '1/2"  PVC 90° Elbow', '406-005', 'SUP2', 'Y', 'PVC FS', 'PVC FS']
['7', '3/4"  PVC 90° Elbow', '406-007', 'SUP2', 'Y', 'PVC FS', 'PVC FS']
['7', '1"  PVC 90° Elbow', '406-010', 'SUP2', 'Y', 'PVC FS', 'PVC FS']
['7', '1.25"  PVC 90° Elbow', '406-012', 'SUP2', 'Y', 'PVC FS', 'PVC FS']
['7', '1.5"  PVC 90° Elbow', '406-015', …
Run Code Online (Sandbox Code Playgroud)

pyodbc executemany

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