解決python mysql insert語句的問題

1、python 數據插入問題

par=[]
for a in params:
if type(a) == list:
par.append(‘“str(a)”')
else:
par.append(a)
for b in par:
print()
cursor.execute(sql,tuple(par))

解決 註意python中的 extend,append 的區別,在數據添加數據庫中的時候,如果列表中列表一定將列表轉為 str 類型,

params 中的 append 添加記錄數據

2、轉為字符串可以插入

[{‘name': ‘0', ‘value': ‘1.0114'}, {‘name': ‘1-90天', ‘value': ‘0.0114'}, {‘name': ‘180天以上', ‘value': ‘0.0445'}, {‘name': ‘91-180天', ‘value': ‘0.0279'}]

3、 數據庫字段太小

alter table 表面 modify 字段名 字段類型 not null comment “ ” 註釋

4、修改表字段大小

如果要是報

not all params used in mysql statement 說明,占位符少瞭

not enough params used in mysql statement 說明,占位符多瞭

補充:python中的insert和append

兩者都是對python內的列表進行操作,append()方法是值在列表的末尾增加一個數據項,insert()方法是指在某個特定位置前加一個數據項。

Python內的list實現是通過數組實現的,而不是鏈表的形式,所以每當執行insert()操作時,都要將插入位置的元素向後移動才能在相應的位置插入元素,執行append()操作時,如果分配的空間還足夠大的話那麼就可以直接插到最後,如果空間不夠的話就需要將已有的數據復制到一片更大的空間後再插入新元素,insert()空間不夠的話也是同樣。

補充:Python中列表的append操作比insert操作效率高的實質

Python中的列表並不是傳統意義上的列表,這也是Python中列表的append操作比insert操作高效的根本原因。

傳統意義上的列表,通常叫做鏈表,是通過一系列的節點來實現的,每個節點(尾節點除外)都有一個指向下一個節點的指針。

簡單單向鏈表(雙向鏈表多一個指向前一個節點的指針)實現如下:

class Node:
def __init__(self,value,next=Node)
self.value=value
self.next=next
將節點構造成列表:
>>>L=Node("a",Node("b",Node("c",Node("d"))))
>>>L.next.next.value
'c'

但是Python中的列表則與此不同。

它不是由若幹個獨立的節點相互引用而組成的,而是一整塊單一連續的內存區塊–我們通常稱之為數組。這直接導致其與鏈表之間的一些區別。

例如,盡管兩者在遍歷時的效率相差無幾(除瞭鏈表有一些額外開銷),但是如果我們按照既定索引值對某元素進行直接訪問的話,顯然使用數組會更加的高效。

因為在數組中,我們通常可以直接計算出目標元素在內存中的位置,並對其進行直接訪問。而對於鏈表,我們需要從頭開始遍歷整個鏈表。

但是對於insert操作來說,情況又有所不同。

對於鏈表而言,隻要知道瞭在哪裡執行insert操作,其操作成本是非常低的。

無論該鏈表中有多少元素,其操作時間大致相同。但是,對於數組而言,每次執行insert操作都需要移動插入點右邊所有的元素,甚至在必要時需要把所有數組元素復制到另外一個更大的數組中。

也正因如此,append操作通常會采用一種被稱為動態數組或向量的特定解決方案。

其主要思路是將內存分配的過大一些,並且等到其溢出時,在線性時間內再次重新分配內存。但這樣做似乎會使得append操作變得跟insert操作一樣糟糕。

其實不然,因為盡管這兩種情況會迫使我們去搬動大量的元素,但主要的不同點在於,對於append操作,發生這樣的可能性要小得多。

事實上,隻要我們能確保每次所搬入的數組都大過原數組一定的比例(例如20%甚至100%),那麼該操作的平均成本(或者說的更確切一些,將這些搬運開銷均攤到每次append操作中去)通常是常數的。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: