![](/img/trans.png)
[英]How to remove string quotations, commas and parenthesis from Python itertools output?
[英]How to remove quotations of string in list of values for sql query in python
我想在python中使用SQL將值插入表open.roads中,該表具有以下列:
id integer NOT NULL DEFAULT nextval('open.res_la_roads_id_seq'::regclass),
run_id integer,
step integer,
agent integer,
road_id integer,
CONSTRAINT res_la_roads_pkey PRIMARY KEY (id)
我試圖在一個查詢中將各種值的行寫入sql,因此,按照以下示例,我創建了一個列表,其中包含要在查詢中插入的值:
INSERT INTO open.roads(id, run_id, step, agent, road_id)
VALUES (DEFAULT, 1000, 2, 2, 5286), (DEFAULT, 1000, 1, 1, 5234);
Python中的列表應包含:
list1=(DEFAULT, 1000, 2, 2, 5286), (DEFAULT, 1000, 1, 1, 5234), (.....
我的值“ DEFAULT”有問題,因為它是一個字符串,應該在sql中引入而不使用引號 。 但是我無法刪除引號,我試圖將“ DEFAULT”保存為字符串形式的變量,並使用了str.remove(),str.replace()等。
我嘗試使用的代碼:
for road in roads:
a="DEFAULT", self.run_id, self.modelStepCount, self.unique_id, road
list1=append.(a)
val=','.join(map(str, list1))
sql = """insert into open.test ("id","run_id","step","agent","road_id")
values {0}""".format(val)
self.model.mycurs.execute(sql)
由於出現引號,我得到一個錯誤:
psycopg2.DataError: invalid input syntax for integer: "DEFAULT"
LINE 2:('DEFAULT', 582, 0, 2, 13391),('DEFAULT'
如何刪除它們? 還是有其他方法可以做到這一點?
我認為這可能對您有幫助。
sql = "INSERT INTO open.roads(id, run_id, step, agent, road_id) VALUES "
values = ['(DEFAULT, 1000, 2, 2, 5286), ', '(DEFAULT, 1000, 1, 1, 5234)']
for value in values:
sql += value
print(sql)
運行此代碼后,它將打印: INSERT INTO open.roads(id, run_id, step, agent, road_id) VALUES (DEFAULT, 1000, 2, 2, 5286), (DEFAULT, 1000, 1, 1, 5234)
其他解決方案是使用%
格式化字符串。
print("INSERT INTO open.roads(id, run_id, step, agent, road_id) VALUES (%s, %s, %s, %s, %s)" % ("DEFAULT", 1000, 2, 2, 5286))
這將打印INSERT INTO open.roads(id, run_id, step, agent, road_id) VALUES (DEFAULT, 1000, 2, 2, 5286)
只需在追加查詢中省略該列,因為根據您的表約束,該列將提供DEFAULT值。 另外,通過在execute
傳遞vars參數來使用值的參數化(比字符串插值更安全/更可維護): execute(query, vars)
。 並且由於您有一個元組列表,因此甚至可以考慮executemany()
。
下面假設數據庫API(即pymysql,pyscopg2)使用%s
作為參數占位符,否則使用?
:
# PREPARED STATEMENT
sql = """INSERT INTO open.test ("run_id", "step", "agent", "road_id")
VALUES (%s, %s, %s, %s);"""
list1 = []
for road in roads:
a = (self.run_id, self.modelStepCount, self.unique_id, road)
list1.append(a)
self.model.mycurs.executemany(sql, list1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.