要解决此问题,您应确保:

要解决此问题,您应确保:

我创建了一个 Python 脚本,该脚本执行一些计算,然后指向 DB 以填写一些表格。该 DB 托管在 Ubuntu Azure VM 上,我在该 VM 上设置了一个 MySQL 数据库。我能够使用本地 DB(在 Windows 中)和以下代码将表格写入 DB,但当我尝试使用 Linux 和包登录 DB 时mysql.connector,我得到了: ProgrammingError: 1045 (28000): Access denied for user 'admin'@'localhost' (using password: NO)

“admin” 是托管服务器的 Azure VM 的名称。我尝试使用 DB 根目录及其密码,以及我创建的另一个 DB 用户名和密码组合,但出现了同样的错误。如能得到任何帮助,我们将不胜感激。

def save_df_to_mysql_db(df, database_name, table_name, username='', password='', host='', port=''):
    # Initialize the configparser
    config = configparser.ConfigParser()

    # Read the config.ini file
    config.read('config_linux.ini')

    # Get the database configuration values
    db_config = {
        'port': config.get('DB', 'port'),
        'host': config.get('DB', 'host'),
        'username': config.get('DB', 'username'),
        'password': config.get('DB', 'password')
    }
    # Connect to MySQL database
    conn = mysql.connector.connect(user=username, password=password, host=host, port=port, auth_plugin='mysql_native_password')
    cursor = conn.cursor()
    
    # Create database if it doesn't exist
    cursor.execute(f"CREATE DATABASE IF NOT EXISTS {database_name}")
    conn.database = database_name
    
    # Create SQLAlchemy engine
    engine = create_engine(f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}")
    
    # Save DataFrame to MySQL database
    df.to_sql(table_name, con=engine, if_exists='replace', index=False)
    
    # Close connection
    cursor.close()
    conn.close()
    print(f"Dataframe {df} saved to {table_name} of {database_name}.")    

答案1

要解决此问题,您应确保:

  1. 您的 MySQL 数据库中存在用户“admin”。
  2. 用户“admin”的密码正确。
  3. 用户“admin”具有访问连接字符串中指定的数据库的必要权限。
  • 如果您使用 SQLAlchemy 中的 create_engine 函数,请确保在连接字符串中提供正确的密码。以下是修改连接字符串以包含密码的示例:
    engine = create_engine(f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}")

相关内容