Python Script - mysql.connector не обновляет таблицу MariaDB - PullRequest
0 голосов
/ 08 марта 2019

Я некоторое время пытался выяснить, почему мой скрипт на python не обновляет мою базу данных.

У меня есть файл с именем database.py, и вот как он выглядит:

    import mysql.connector as mariadb
    import globals

    def connect():
        mariadb_connection = mariadb.connect(user=globals.MY_USERNAME, password=globals.MY_PASSWORD, database='ellen')
        return mariadb_connection

    def insert_author_topics(author_id, topics, cursor):
        sql = "UPDATE author SET topics = \'" + str(topics) + "\' WHERE id = " + str(author_id) + ";"
        try:
            cursor.execute(sql)
        except mariadb.Error as error:
             print("Error: {}".format(error))

    def close(connection):
       connection.commit()
       connection.close()

В моем главном файле у меня есть функция, подобная этой:

def get_topics(x, ldamodel, cursor, connection):

    author_text = x['processed_text']
    bow_vector = dictionary.doc2bow([author_text])
    topics = '['
    for index, score in sorted(ldamodel[bow_vector], key=lambda tup: -1*tup[1]):
        new_topic = "Score: {}\t Topic: {} ".format(score, ldamodel.print_topic(index, 5))
        topics += new_topic
    topics += ']'
    database.insert_author_topics(author['id'], topics, cursor)
    connection.commit()

У меня есть pandas dataframe авторов, и get_topics, который вызывает insert_author_topics, вызывается для каждого автора следующим образом:

authors.apply(lambda x: get_topics(x, ldamodel, cursor, connection), axis=1)

Всего у меня около 100 000 авторов.По какой-то причине, когда я запускаю этот скрипт, в базе данных обновляется только около 200 авторов.

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

Любая помощь будет оценена.Я могу предоставить больше информации, если это необходимо.Спасибо!

1 Ответ

0 голосов
/ 17 марта 2019

Проблема была в этой строке кода:

database.insert_author_topics(author['id'], topics, cursor)

Если вы посмотрите на аргументы, которые я передал функции, я на самом деле должен был вызывать insert_author_topics так:

database.insert_author_topics(x['id'], topics, cursor)

Я не совсем уверен, как это работает без каких-либо ошибок, но рад, что наконец-то понял это!

...