没有足够的论据有什么区别

2024-06-11 11:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个几乎完全相同的程序。一个有效,另一个不行。不工作的程序显示错误“格式字符串的参数不足”。这可能与变量dbname中的“%”有关,但我不明白为什么一个程序可以工作,而另一个程序不能工作。两个程序都试图在一个通配符中使用。在

工作程序:

import subprocess
import sys
import commands
from sqlalchemy import create_engine
from sqlalchemy import Date, DateTime
from sqlalchemy import create_engine      
from sqlalchemy import MetaData, Column, Table, ForeignKey
from sqlalchemy import Integer, String
from sqlalchemy.sql import select

engine = create_engine('mysql://UID:PASS@999.999.99.99:9999/access_benchmark_staging', echo=True)
dest = engine.connect()
dest.execute("truncate table TABAUTH")


def dbapull(applid, ssid, host, port, dbname):
    print "dbapull " + dbname + ""
    source = pyodbc.connect('Driver={IBM DB2 ODBC DRIVER};Database=' + ssid +';Hostname=' + host + ';Port=' + port + ';Protocol=TCPIP;Uid=user;Pwd=password', echo=True)
    src = source.cursor()
    src.execute("SELECT DISTINCT SUBSTR(CURRENT SERVER,1,7) AS SSID, SUBSTR(B.GRANTEE,1,8) AS GRANTEE, B.UPDATEAUTH AS U, B.INSERTAUTH AS I, B.DELETEAUTH AS D, A.CREATOR, B.DBNAME, B.TTNAME, B.ALTERAUTH AS C FROM " + ssid + ".SYSIBM.SYSTABLES A LEFT JOIN " + ssid + ".SYSIBM.SYSTABAUTH B ON A.CREATOR = B.TCREATOR AND A.NAME = B.TTNAME WHERE A.CREATOR IN ('PFPROD','PGPROD','PSPROD','PS','PROD') AND A.DBNAME LIKE " + dbname + " AND (B.UPDATEAUTH <> ' ' OR  B.INSERTAUTH <> ' ' OR  B.DELETEAUTH <> ' ') AND A.TYPE IN ('T','V') AND B.GRANTEETYPE = ' ' AND A.NAME NOT IN ('DSN_VIEWREF_TABLE','DSN_PGRANGE_TABLE','DSN_SORTKEY_TABLE','DSN_SORT_TABLE','DSN_DETCOST_TABLE','DSN_FILTER_TABLE','DSN_PTASK_TABLE','DSN_STATEMNT_TABLE','DSN_PGROUP_TABLE','DSN_STRUCT_TABLE','DSN_PREDICAT_TABLE','PLAN_TABLE') ORDER BY 2")
    for row in src:
       #print (row)
       row[0] = str(row[0]).strip()
       row[1] = str(row[1]).strip()
       row[2] = str(row[2]).strip()
       row[3] = str(row[3]).strip()
       row[4] = str(row[4]).strip()
       row[5] = str(row[5]).strip()
       row[6] = str(row[6]).strip()
       row[7] = str(row[7]).strip()
       row[8] = str(row[8]).strip()
       result = dest.execute("insert ignore into TABAUTH values ('" + applid + "','" + row[0] + "','" + row[1] + "','" + row[2] + "','" + row[3] + "','" + row[4] + "','" + row[5] + "','" + row[6] + "','" + row[7] + "','" + row[8] + "')")

dbapull("AAA", "BBB", "CCC", "DDD", "'%PMC%'")

dest.close()

非工作程序:

^{pr2}$

Tags: andfromimport程序sqlalchemyastableengine