1

この質問がされているかどうかを確認しようとしましたが、おそらくそうであると思われますが、答えが見つかりませんでした. pyodbc を使用して Python スクリプトから MS SQL Server にクエリを実行しています。

SQL を照会する関数を定義しています。クエリ文字列には、SQL が解釈するワイルドカードを意味する '%R_%' と、単一引用符の間に Python の変数を配置することを意味する '%s' の両方があります。次のようになります。

def numcust(matter):
    QryString = """
    select count(distinct user_id)
    from dbo.tbl_case_details
    where request like '%r_%'
    and project_id in
        (
        select distinct project_id
        from dbo.tbl_projects
        where matter_number = '%s'
        );
    """ % matter
    cursor.execute(QryString)
    row = cursor.fetchone()
    return row[0]

r_ のワイルドカードをエスケープして、SQL に正常に渡すにはどうすればよいですか?

よろしくお願いします。

4

2 に答える 2

2

%それらをエスケープしたい場所を2倍にします(つまり'%%r_%%')。また、cursor.execute関数内の文字列を次のよう に補間します。

cursor.execute(QryString, matter)
于 2013-06-26T21:21:09.543 に答える
1

"%% %s"%("Hello",)%s のものを適用した後、2 つの % 記号は 1 つになるはずです ...

しかし、実際には、組み込みのクエリのものを使用する必要があります

QryString = """
select count(distinct user_id)
from dbo.tbl_case_details
where request like '%r_%'
and project_id in
    (
    select distinct project_id
    from dbo.tbl_projects
    where matter_number = '%s'
    );
"""
cursor.execute(QryString,matter) 

あなたはまだ%%リテラルのために行う必要があるかもしれませんが%

于 2013-06-26T21:21:10.727 に答える