Mel*_*vin 5 python database postgresql ponyorm
我正在尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
这只是一个简短的示例,但输入的结构是相同的:列表列表。我从几个 xml 文件中提取数据并一次插入一个“文件”。
有没有人知道如何在 Pony ORM 中将多行数据放入一个插入查询中?
Pony 没有为此提供特殊的东西,您可以使用execute_valuesfrom psycopg2.extras。从中获取connection对象db以使用它。
from psycopg2.extras import execute_values\n...\nnames = [\n (\'\xe3\x81\xaf\xe3\x82\x8b\xe3\x81\xa8\', \'\xe4\xb8\x80\xe6\xb8\xa9\'),\n (\'\xe3\x82\x8a\xe3\x81\x8f\', \'\xe4\xbf\x90\xe7\xa9\xba\'),\n (\'\xe3\x81\xaf\xe3\x82\x8b\', \'\xe5\x92\x8c\xe6\x99\xb4\'),\n (\'\xe3\x81\xb2\xe3\x81\xaa\xe3\x81\x9f\', \'\xe5\x90\x91\xe6\x97\xa5\'),\n (\'\xe3\x82\x86\xe3\x81\x86\xe3\x81\xa8\', \'\xe4\xbd\x91\xe7\xaf\xa4\')\n]\n\n@db_session\ndef populate_persons(names):\n sql = \'insert into Person(first_name, last_name) values %s\'\n con = db.get_connection()\n cur = con.cursor()\n execute_values(cur, sql, names)\n\npopulate_persons(names)\nRun Code Online (Sandbox Code Playgroud)\nexecute_values位于快速执行帮助程序列表中,因此我认为 i\xd0\xb5 应该是最有效的方法。
| 归档时间: |
|
| 查看次数: |
1708 次 |
| 最近记录: |