- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在这种情况下,我创建了一个方法来在数据库中插入行。我向该方法提供列、值和表名。
COLUMNS = [['NAME','SURNAME','AGE'],['SURNAME','NAME','AGE']]
VALUES = [['John','Doe',56],['Doe','John',56]]
TABLE = 'people'
这是我想传递的方式,但它不起作用:
db = DB_CONN.MSSQL() #method for connecting to MS SQL or ORACLE etc.
cursor = db.cursor()
sql = "insert into %s (?) VALUES(?)" % TABLE
cursor.executemany([sql,[COLUMNS[0],VALUES[0]],[COLUMNS[1],VALUES[1]]])
db.commit()
这是它传递查询的方式,但问题是我必须有预定义的列名,这不好,因为如果另一个列表有不同的列排序怎么办?比名字将在姓氏和姓氏中。
db = DB_CONN.MSSQL() #method for connecting to MS SQL or ORACLE etc.
cursor = db.cursor()
sql = 'insert into %s (NAME,SURNAME,AGE) VALUES (?,?,?)'
cursor.executemany(sql,[['John','Doe',56],['Doe','John',56]])
db.commit()
希望我已经解释清楚了。附言。 COLUMNS和VALUES是从json字典中提取出来的
[{'NAME':'John','SURNAME':'Doe','AGE':56...},{'SURNAME':'Doe','NAME':'John','AGE':77...}]
如果有帮助。
解决方案:
class INSERT(object):
def __init__(self):
self.BASE_COL = ''
def call(self):
GATHER_DATA = [{'NAME':'John','SURNAME':'Doe','AGE':56},{'SURNAME':'Doe','NAME':'John','AGE':77}]
self.BASE_COL = ''
TABLE = 'person'
#check dictionary keys
for DATA_EVAL in GATHER_DATA:
if self.BASE_COL == '': self.BASE_COL = DATA_EVAL.keys()
else:
if self.BASE_COL != DATA_EVAL.keys():
print ("columns in DATA_EVAL.keys() have different columns")
#send mail or insert to log or remove dict from list
exit(403)
#if everything goes well make an insert
columns = ','.join(self.BASE_COL)
sql = 'insert into %s (%s) VALUES (?,?,?)' % (TABLE, columns)
db = DB_CONN.MSSQL()
cursor = db.cursor()
cursor.executemany(sql, [DATA_EVAL.values() for DATA_EVAL in GATHER_DATA])
db.commit()
if __name__ == "__main__":
ins = INSERT()
ins.call()
最佳答案
您可以利用 python 字典的键值对列表的非随机特性。您应该检查 json
记录数组中的所有项目是否具有相同的字段,否则您将在查询中遇到异常。
columns = ','.join(records[0].keys())
sql = 'insert into %s (%s) VALUES (?,?,?)' % (TABLE, columns)
cursor.executemany(sql,[record.values() for record in records])
关于Python:为列和值设置参数 pypyodbc - executemany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44941926/
如何获得这些 SQL 语句序列?上类?我以前只处理过单个 select 语句,而 cursor.execute 工作得很好。我现在不知道在这种情况下该怎么办。我收到的错误是格式需要映射 args =
我正在使用 Python 及其 MySQLdb 模块将一些测量数据导入 Mysql 数据库。我们拥有的数据量非常大(目前大约有 250 MB 的 csv 文件, future 还会有更多)。 目前我使
使用以下函数: import pyodbc def execute_side_effect_stmt(sql_stmt: str, params: list): with get_connec
我可以使用以下代码迭代 python 对象,但是我希望能够使用占位符作为架构和表名称,通常我使用 {}.{} 执行此操作.format() 方法,但是如何将这两个方法结合起来? cur.execute
我正在使用Python中的MySQLdb模块来编写SQL语句。我很难以我想要的方式使用变量。这是我的工作: stmt = ''' INSERT INTO Table1 (name, status) S
如果我跑 cur.execute('SELECT * FROM some_table WHERE some_column = %s;', ('some_value',)) 然后立即调用 cur.fet
我正在使用 Python 及其 MySQLdb 模块,是否可以从条件中的元组/字典/列表中执行“selectmany”之类的操作 像这样: cursor.executemany("""SELECT *
我正在使用 Python MySQLdb 将数据插入 mysql 数据库。 InsertList 包含许多行。除了少数违反数据库完整性规则外,其他都是有效的。如果我运行下面的代码,命令会返回错误。 C
我有以下功能,可以批量插入 IPv6 IP 列表 def insertToDb(ipList): print("OK") try: conn = psycopg2.connect("d
我想按如下方式从 MySQL 中选择值 do_not_select = [1,2,3] cursor = database.cursor() cursor.executemany("""SELECT
我正在使用 oracledb (4.0.1) 和 Node (v10.14.2)。我在下面有 json 列表; [ { DIFFID: 8, DIFFDATE: 2019-11-01T14:0
我在下面的代码中找不到我的错误。当它运行时,出现类型错误:cur.executemany(sql % itr.next()) => 'function takes exactly 2 argument
我正在尝试将 psycopg2 executemany 用于简单的多插入,但我只能使用 dict 而不是“普通”值序列使其工作: # given: values = [1, 2, 3] ; curso
我正在使用 MySQLdb 模块插入到我的数据库中。我有以下代码 sqlString = """INSERT INTO PERFORMER (PERFORMER)
我有一个由名为 member 的字典组成的列表,我像这样插入到数据库中 # Executes query for each dictionary in member. cursor.e
在这种情况下,我创建了一个方法来在数据库中插入行。我向该方法提供列、值和表名。 COLUMNS = [['NAME','SURNAME','AGE'],['SURNAME','NAME','AGE']
我想在我的程序中使用 executemany 一次存储 20 条记录,这是文档中的内容... c.executemany( """INSERT INTO breakfast (name, spam
我正在尝试使用 pgdb 模块执行从 Python 到 PostgreSQL 的 insert 语句。 我看到文档说: cursor.executemany(query, list of pa
如果我运行 SQL 命令 INSERT INTO my_table VALUES (?); 有约束 CREATE my_table( user_name VARCHAR(255) PRIMAR
我使用 Django cursor.execuremany 有一段时间了,我想做一些准备工作。 在这个 Stackoverflow 页面上,我读到使用字符串格式化运算符和问号是个坏主意。 How to
我是一名优秀的程序员,十分优秀!