1

Python でのデータベースの使用に関する研究をさらに進めて、Bryan Moyles の優れた例に基づいて次のコードを作成しました。

from os   import system as cmd
from time import sleep  as sleep
try:
    from sqlite3 import dbapi2 as sqlite
except ImportError:
    from pysqlite2 import dbapi2 as sqlite

class search_db:
    def __init__(self, db, name):
        self.db = db_connection
        self.name = name
        self.dbc = self.db.cursor()

    def __getitem__(self, item):
        self.dbc.execute("select * from %s limit %s, 1" % (self.name, item))
        return self.dbc.fetchone()

def search():
    customer_id  = []
    customer_ids = search_db(db_connection, "customers")
    for i in range(10000):
        if not "None" in str(customer_ids[i]): customer_id.append(customer_ids[i])
    return customer_id

## init ##
db_name = 'customers'
db_connection = sqlite.connect('program.db')
db_curs = db_connection.cursor()

search()

確かに、それは素晴らしいことではありません。おそらくもう少し最適化できることはわかっています。ご覧のとおり、私はデータベースを検索する方法を理解しようと懸命に努力してきました。エントリ番号を引き出すデータベース内の情報を含むエントリを取得することができました。if ループを使用して、追加されたリストの値から「GGS-番号」エントリを検索し、正規表現を使用して行番号を抽出し、GGS 番号が適用される顧客に関連する情報を出力することを考えていました。どうすればこれをより良い方法で行うことができるか、誰かがアイデアを持っていますか? また、for i in range(10000) がありますが、より最適化された形式はありますか?

4

1 に答える 1

1

これがすべてテーブル「顧客」の内容を取得することを目的としている場合は、間違っています。SELECT はギャップのないテーブルを提供します。したがって、使用されている ID が 10 と 101 だけの場合、クエリ結果の長さは 2 になり、行 0 と 1 に 2 つの既存のレコードが含まれます。空のレコードをスキップしようとしているように見えますが、何もありません。 .

しかし、あなたはこれをあまりにも複雑にしています。エミュレートするために間違った例を選択しました。あなたが持っているものは、テーブルから n 番目の行を返す SELECT クエリを実行し、非常に遅い配列を扱っているふりをすることができるクラスにラップされます。それを捨てて、最初からやり直してください。

テーブルの内容全体が必要な場合はcustomers、単一のクエリを使用して、次のように取得しますfetchall()

import sqlite3
conn = sqlite3.connect('program.db')
curs = conn.cursor()
ro = curs.execute('select * from customers')
customers = ro.fetchall()

特定のレコードを取得する必要がある場合はWHERE、クエリに句を追加してデータベースに処理させます。ほとんどの場合、テーブル内の位置ではなく、ID (またはその他の属性) によってレコードを取得します。

私のアドバイス: python/sqlite の足場を最小限に抑えてください。接続を設定し、クエリを実行し、結果を 1 つずつ取得するか、まとめて取得します。それで全部です。そしてcurs.rowcount、それらをフェッチする前に、結果行がいくつあるかを調べます。他のすべては、適切な SQL コマンドによって、より簡単かつ効率的に実行されます。したがって、Pythonのライブラリではなく、SQLを読んでください。

于 2012-05-05T14:40:59.390 に答える