我有这样一个插入声明:
mtemp = "station, calendar, type, name, date, time"
query = "INSERT INTO table (%s) VALUES ( '%s', '%s', '%s', %s, '%s', '%s' );"
query = query % (mtemp, mstation, mcalendar, mtype, mname, mdate, mtime)
curs.execute(query, )
conn.commit()
问题是我无法在这个语句中获取变量:mcalendar、mdate、mtime。它们不是常数值。我必须在一个forloop中访问它们。但是,mstation、mtype和mname的值是固定的。我尝试将INSERT语句分成几个部分:一个用于forloop中的三个变量,另一个用于单个forloop中的三个固定值。forloop基本上是定义何时插入行。我有一个rows1列表和一个rows2列表,rows1是一个完整的记录列表,而rows2缺少其中一些记录。我正在检查rows2记录是否存在于rows1中。如果是,则执行INSERT语句,否则不执行任何操作。在
我运行代码发现了两个问题:
希望有人能给我一些提示。提前谢谢!如果需要的话,我可以在这里放更多的代码。我甚至不知道我是否在正确的轨道上。在
以下语法适用于SQLServer2008,但不适用于SQLServer2005。在
我不太清楚你的想法,但这是你需要的吗?在
伪代码
一个INSERT语句总是对应于表中的一个新行。(除非在插入过程中出现错误。)您可以插入一行,然后在以后更新该行以添加/更改信息,但不存在拆分插入的操作。在
如果您有一个查询需要在不断变化的数据中执行多次,最好的选择是prepared statement。准备好的语句“编译”SQL查询,但保留每次执行时可以设置的占位符。这提高了性能,因为不需要每次解析语句。您没有指定用于连接postgres的库,所以我不知道语法是什么,但它是可以查找的。在
如果您不能/不想使用准备好的语句,那么您只需为每个insert创建一次查询字符串。不要替换循环之前的值,等到知道所有值后再创建查询。在
相关问题 更多 >
编程相关推荐