2015-07-10 76 views
1

我有一個本地的數據庫,我嘗試使用python下面的代碼是我用來弱引用的對象已不存在使用python和mysql

>>> from mysql.connector import connect 
>>> p = connect(user="root", password="", host="127.0.0.1", port="3306", database='ef') 
>>> cur = p.cursor() 
>>> p = "s" 
>>> cur.execute("""update ef_reg set region_status = %s where region_id=851""",(p)) 

當我運行最後一個我獲得以下錯誤更新。

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/mysql/connector/cursor.py", line 473, in execute 
    if not self._connection: 
ReferenceError: weakly-referenced object no longer exists 

回答

2

您需要p後添加,。還需要更改連接對象的名稱。

K = connect(user="root", password="", host="127.0.0.1", port="3306", database='ef') 
cur = k.cursor() 
p = "s" 
cur.execute("""update ef_reg set region_status = %s where region_id=851""",(p,)) 
+0

嘗試過,但沒有沒有工作。 – kiran6

+0

是的,謝謝@Avinash它的工作(第一個)。 – kiran6

3

當你做對以下 -

p = "s" 

這使得名p引用一個新的字符串"s",它失去了老參考連接對象。

之後,對連接對象的唯一引用是遊標對象中的弱引用。因此,根據documentation of weak references -

弱引用一個對象是不夠的,以保持物體活着:當一個所指唯一剩下的引用是弱引用,垃圾回收是免費摧毀指涉和重用其內存爲了別的東西。

是最有可能蟒蛇後,垃圾收集連接對象,因爲它沒有在腳本(任何參考,並舉行了借鑑。但是,當你試圖執行腳本,再次嘗試現在使用垃圾收集連接對象,從而導致連接對象已不存在問題

嘗試使用不同的名稱爲字符串,也許s左右

爲例,說明垃圾收集行爲。 -

>>> class CA: 
...  def __del__(self): 
...    print("CA Deleted") 
... 
>>> c = CA() 
>>> c = "s" 
CA Deleted