AttributeError: у объекта 'Engine' нет атрибута 'conn' - PullRequest
0 голосов
/ 07 января 2020

Итак, я пытаюсь создать автоматическое обновление до SQL из другого файла Excel по уникальному значению, чтобы узнать, какие новые данные нужно добавить в базу данных.

В столбцах есть различия имена между базой данных и файлом excel, как в базе данных, и имена без пробелов ...

Я пытался сделать это с pandas, это выдало мне ту же ошибку

Так что вот мой простой код пробовал с xlrd

import xlrd
from sqlalchemy import create_engine


def insert():

    book = xlrd.open_workbook(r"MNM_Rotterdam_5_Daily_Details-20191216081027 - Copy (2).xlsx")
    sheet = book.sheet_by_name("GSM Details")

    database = create_engine(
    'mssql+pyodbc://WWX542337CDCD\SMARTRNO_EXPRESS/myDB?driver=SQL+Server+Native+Client+11.0')  # name of database


    cnxn = database.raw_connection
    cursor = cnxn.cursor()




    query = """Insert INTO [myDB].[dbo].[mnm_rotterdam_5_daily_details-20191216081027] (Date, SiteName, CellCI, CellLAC, CellName, CellIndex) values (?,?,?,?,?,?)"""


    for r in range(1, sheet.nrows):
        date = sheet.cell(r,0).value
        site_name = sheet.cell(r,3).value
        cell_ci = sheet.cell(r,4).value
        cell_lac = sheet.cell(r,5).value
        cell_name = sheet.cell(r,6).value
        cell_index = sheet.cell(r,7).value


        values = (date, site_name, cell_ci, cell_lac, cell_name, cell_index)


        cursor.execute(query, values)
        cnxn.commit()

# Close the cursor
    cursor.close()

# Commit the transaction
    database.commit()

# Close the database connection
    database.close()

# Print results
    print ("")
    print ("")
    columns = str(sheet.ncols)
    rows = str(sheet.nrows)
    print ("Imported", columns,"columns and", rows, "rows. All Done!")
insert()

и это ошибка:

Я пытался изменить диапазон, я обнаружил еще одну ошибку:

Traceback (most recent call last):
  File "D:/Tooling/20200207/uniquebcon.py", line 48, in <module>
    insert()
  File "D:/Tooling/20200207/uniquebcon.py", line 37, in insert
    database.commit()
AttributeError: 'Engine' object has no attribute 'commit'

Я думаю, что это связано SQL -Алхимия в связи

1 Ответ

1 голос
/ 07 января 2020

Вместо создания курсора непосредственно с помощью

cursor = database.raw_connection().cursor()

вы можете создать объект соединения, затем создать из него курсор и затем вызвать .commit() для соединения:

cnxn = database.raw_connection()
crsr = cnxn.cursor()
# do stuff with crsr ...
cnxn.commit()
...