我正在尝试使用 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 中将多行数据放入一个插入查询中?
我在 Python 3 中很难将字符串拆分为特定部分。字符串基本上是一个列表,以冒号 (:) 作为分隔符。
只有当冒号 (:) 以反斜杠 (\) 为前缀时,它才不算作分隔符,而是作为列表项的一部分。
例子:
String --> I:would:like:to:find\:out:how:this\:works
Converted List --> ['I', 'would', 'like', 'to', 'find\:out', 'how', 'this\:works']
Run Code Online (Sandbox Code Playgroud)
知道这如何工作吗?
@Bertrand 我试图给你一些代码,我能够找到一个解决方法,但这可能不是最漂亮的解决方案
text = "I:would:like:to:find\:out:how:this\:works"
values = text.split(":")
new = []
concat = False
temp = None
for element in values:
# when one element ends with \\
if element.endswith("\\"):
temp = element
concat = True
# when the following element ends with \\
# concatenate both before appending them to new list
elif …Run Code Online (Sandbox Code Playgroud) 我的函数是结构的一部分(出于上下文原因),它不接受参数self。此外,结构本身采用T带有一些特征限制的通用参数:
trait SomeRestriction {}
struct SomeStruct<T: SomeRestriction>(T);
impl<T: SomeRestriction> SomeStruct<T> {
fn some_function_that_does_not_take_self() -> String {
todo!()
}
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个测试,并且想避免为该函数提供self参数,因为使用一些通用结构参数模拟对象对于该小函数和测试来说需要付出很大的努力。
我在其他测试中这样做,因为那里有必要,但我想尽可能避免它。
我尝试这样称呼它:
let some_string = SomeStruct::some_function_that_does_not_take_self();
Run Code Online (Sandbox Code Playgroud)
但它会要求我提供类型注释,即使不需要。
有没有办法在不模拟结构或从结构实现中删除函数的情况下调用它?