簡體   English   中英

將 sql 存儲在 python 中的變量中

[英]store sql result in a variable in python

在執行 select 語句后,我需要幫助將查詢結果存儲在變量中。 這是我下面的代碼。沒有錯誤,但我需要幫助將其存儲在 PYTHON 中的變量中。我正在使用 pymssql 和 python 2.7.9。 提前致謝

conn = pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython')
    c = conn.cursor()
    row = c.execute("select fid, fname, lname, contact from tblcontact where fname='maiji'")
    row = c.fetchall()
    while row:
        print row
        row = c.fetchall()

簡而言之,這就是您正在做的事情。

row = c.ex...
row = c.fe..
    row = c.fe...

在編程中,這稱為給變量賦值。 簡而言之,行是容器,您要多次替換它。

我們暫時忽略優化,只忽略 go 的基礎知識。

conn = pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython')
c = conn.cursor()
row = c.execute("select fid, fname, lname, contact from tblcontact where fname='maiji'")
rows = c.fetchall()
for row in rows:
    print(row)

首先, c.fetchall()從您的查詢中檢索所有結果,我們將把它們放在一個名為rows的變量中。 然后我們通過執行for row in rows創建一個迭代器(你試圖用 while 循環做的事情)。 然后我們簡單地打印每一行。

你應該怎么做

這稱為上下文管理器。

with pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython') as conn:
    c = conn.cursor()
    rows = c.execute("select fid, fname, lname, contact from tblcontact where fname='maiji'")
    for row in c.fetchall():
        print(row)

這將打開一個名為conn的上下文句柄,它會在您完成代碼時自動關閉連接(不留下任何打開的連接,這可能是一個問題),其次,直接迭代c.fetchall()的代碼更少,如果可能會更快function 支持迭代,它可能會在以后的版本中支持。


在這里,您只需將所有結果添加到一個 hughe 字符串中(例如,用於轉儲到文件等)。 請注意,如果結果很多,這可能會填滿您的 memory,在這種情況下將其順序存儲到文件中會更好,因此您通常出於 memory 的原因單獨處理每個數據庫行。

with pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython') as conn:
    c = conn.cursor()
    rows = c.execute("select fid, fname, lname, contact from tblcontact where fname='maiji'")
    string_result = ''
    for row in c.fetchall():
        string_result = row + '\n'

您應該使用迭代器而不是 while 循環。

conn = pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython')
c = conn.cursor()
c.execute("select fid, fname, lname, contact from tblcontact where fname='maiji'")

for row in c:
    print(row)

c.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM