Python Pony ORM 一次插入多个值
Python Pony ORM Insert multiple values at once
我正在尝试使用 Pony ORM 将多个值插入到我的 postgres 数据库中。我目前的做法非常低效:
from pony.orm import *
db = Database()
class Names(db.Entity):
first_name = Optional(str)
last_name = Optional(str)
family = [["Peter", "Mueller"], ["Paul", "Meyer"], ...]
@db_session
def populate_names(name_list)
for name in name_list:
db.insert("Names", first_name=name[0], last_name=name[1])
if __name__ == "__main__":
db.bind(provider='postgres', user='', password='', host='', database='')
db.generate_mappings(create_tables=True)
populate_names(family)
这只是一个简短的示例,但输入的结构是相同的:
列表的列表。
我正在从多个 xml 文件中提取数据并一次插入一个 "file"。
有没有人知道如何在 Pony ORM 中将多行数据放入一个插入查询中?
Pony 没有为此提供特殊的东西,您可以使用 psycopg2.extras
中的 execute_values
。从 db
获取 connection
对象以使用它。
from psycopg2.extras import execute_values
...
names = [
('はると', '一温'),
('りく', '俐空'),
('はる', '和晴'),
('ひなた', '向日'),
('ゆうと', '佑篤')
]
@db_session
def populate_persons(names):
sql = 'insert into Person(first_name, last_name) values %s'
con = db.get_connection()
cur = con.cursor()
execute_values(cur, sql, names)
populate_persons(names)
execute_values
在 Fast execution helpers 列表中,所以我认为 iе 应该是最有效的方法。
目前我正在为未来的项目试验 PonyORM,也得出了您提供的结论。
如何以庞大的方式插入数据的唯一方法是:
# assuming data has this structure:
# [['foo','bar','bazooka'],...]
@db_session
def insert_bulk_array(field1, field2, field3):
MyClass(field1=field1, field2=field2, field3=field3)
# assuming the data is:
# {'field1':'foo','field2':'bar','field3':'bazooka'}
@db_session
def insert_bulk_dict(data)
MyClass(**data)
但从我的角度来看,这在某种程度上仍然很方便,特别是当您的数据以 JSON.
形式出现时
PonyORM 的问题跟踪器中有一个 open issue 正是要求这个功能。
我推荐给它投票。
我正在尝试使用 Pony ORM 将多个值插入到我的 postgres 数据库中。我目前的做法非常低效:
from pony.orm import *
db = Database()
class Names(db.Entity):
first_name = Optional(str)
last_name = Optional(str)
family = [["Peter", "Mueller"], ["Paul", "Meyer"], ...]
@db_session
def populate_names(name_list)
for name in name_list:
db.insert("Names", first_name=name[0], last_name=name[1])
if __name__ == "__main__":
db.bind(provider='postgres', user='', password='', host='', database='')
db.generate_mappings(create_tables=True)
populate_names(family)
这只是一个简短的示例,但输入的结构是相同的: 列表的列表。 我正在从多个 xml 文件中提取数据并一次插入一个 "file"。
有没有人知道如何在 Pony ORM 中将多行数据放入一个插入查询中?
Pony 没有为此提供特殊的东西,您可以使用 psycopg2.extras
中的 execute_values
。从 db
获取 connection
对象以使用它。
from psycopg2.extras import execute_values
...
names = [
('はると', '一温'),
('りく', '俐空'),
('はる', '和晴'),
('ひなた', '向日'),
('ゆうと', '佑篤')
]
@db_session
def populate_persons(names):
sql = 'insert into Person(first_name, last_name) values %s'
con = db.get_connection()
cur = con.cursor()
execute_values(cur, sql, names)
populate_persons(names)
execute_values
在 Fast execution helpers 列表中,所以我认为 iе 应该是最有效的方法。
目前我正在为未来的项目试验 PonyORM,也得出了您提供的结论。
如何以庞大的方式插入数据的唯一方法是:
# assuming data has this structure:
# [['foo','bar','bazooka'],...]
@db_session
def insert_bulk_array(field1, field2, field3):
MyClass(field1=field1, field2=field2, field3=field3)
# assuming the data is:
# {'field1':'foo','field2':'bar','field3':'bazooka'}
@db_session
def insert_bulk_dict(data)
MyClass(**data)
但从我的角度来看,这在某种程度上仍然很方便,特别是当您的数据以 JSON.
形式出现时PonyORM 的问题跟踪器中有一个 open issue 正是要求这个功能。
我推荐给它投票。