0

2 つのテーブルがあり、1 つは ms sql に、もう 1 つは sqlite3 にあります。mssql テーブルのフィールドを sqlite3 テーブルの関連する値に更新する必要があります。

ここに私のコードがあります:

import pypyodbc
import sqlite3

connection = pypyodbc.connect('Driver={SQL Server};'
                              'Server=****'
                              'Database=****;'
                              'uid=****;pwd=****')

cursor = connection.cursor()
SQLCommand = ("select ObjectId, ObjectColumnName,Label from LocalizedLabel "
              "where LanguageId = 1065")

sqlUpdate = ("UPDATE LocalizedLabel "
             "SET Label = ? "
             "WHERE ObjectId = ? and ObjectColumnName = ? and LanguageId = 1065")

cursor.execute(SQLCommand)
results = cursor.fetchall()

srcDB = sqlite3.connect('crmLLDB')

for result in results:
    val = (result[0], result[1])
    print('SELECT "1065" FROM crm '
          'WHERE UPPER(ObjectID)= UPPER(%s) AND ObjectColumnName = %s' % val)
    srcCursor = srcDB.execute('SELECT "1065" FROM crm '
                              'WHERE UPPER(ObjectID)= UPPER(?) AND ObjectColumnName = ?', val)
    if srcCursor.fetchone() is None:
        print("No translation found for " + result[2])
    else:
        translation = srcCursor.fetchone()[0]
        updateVals = (translation, result[0], result[1])
        cursor.execute(sqlUpdate, updateVals)


connection.close()
srcDB.close()

objectId は GuID で、他のフィールドはすべて文字列です

印刷関数は次を返します。

SELECT "1065" FROM crm WHERE UPPER(ObjectID)= UPPER(b'0340B506-2341-DB11-898A-0007E9E17EBD') AND ObjectColumnName = DisplayName

ウォッチャーが与える間:

result[0] = 'b\\'0340B506-2341-DB11-898A-0007E9E17EBD\\''
result[1] = 'DisplayName'

もちろん、このクエリは次のエラーを返します。

[1] [SQLITE_ERROR] SQL error or missing database (near "'0340B506-2341-DB11-898A-0007E9E17EBD'": syntax error)

このクエリ中:

SELECT "1065" FROM crm WHERE UPPER(ObjectID)= UPPER('0340B506-2341-DB11-898A-0007E9E17EBD') AND ObjectColumnName = 'DisplayName'

完璧な答えを返してください。誰か私の問題を指摘してもらえますか?

4

1 に答える 1

1

どうやら問題は GuId にpypyodbcあり、その問題は GuId にありましたpyodbc

私の最終的なコード、将来のグーグルユーザーが通り過ぎる場合:

import pyodbc
import sqlite3

startTme = datetime.now()
connection = pyodbc.connect('Driver={SQL Server};'
                            'Server=*****;'
                            'Database=****;'
                            'uid=sa;pwd=*****')

cursor = connection.cursor()
SQLCommand = ("select ObjectId, ObjectColumnName,Label from LocalizedLabel "
              "where LanguageId = 1065")

sqlUpdate_p = ("UPDATE LocalizedLabel "
               "SET Label = ? "
               "WHERE ObjectId = ? and ObjectColumnName = ? and LanguageId = 1065")

cursor.execute(SQLCommand)
results = cursor.fetchall()

srcDB = sqlite3.connect('crmLLDB')

jobLength = str(len(results))
i = 0

for result in results:
    val = (result[0], result[1])
    srcCursor = srcDB.execute('SELECT "1065" FROM crm '
                              'WHERE UPPER(ObjectID)= UPPER(?) AND ObjectColumnName = ?', val)
    trans = srcCursor.fetchall()
    for tr in trans:
        updateVals = (tr[0], result[0], result[1])
        cursor.execute(sqlUpdate_p, updateVals)
        i += 1

connection.commit()
connection.close()
srcDB.close()
于 2016-04-19T06:14:21.607 に答える