Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过python将csv文件插入MySQL。运行,但数据未填充到表中_Python_Mysql_Csv - Fatal编程技术网

通过python将csv文件插入MySQL。运行,但数据未填充到表中

通过python将csv文件插入MySQL。运行,但数据未填充到表中,python,mysql,csv,Python,Mysql,Csv,首先,我对python非常陌生,所以要友好。 我正在尝试获取一个CSV文件,该文件是由位于我驱动器上的文件夹中的SQL查询生成的,并通过python“上载”/“将该文件上的数据插入MySQL表中。我不想简单地手动上传文件。脚本运行并显示数据处理过程,但当我进入表并尝试搜索时,什么也没有出现。下面是我写的: cursor = cnx.cursor() if cnx.is_connected(): print('Successfully connected to MySQL databas

首先,我对python非常陌生,所以要友好。 我正在尝试获取一个CSV文件,该文件是由位于我驱动器上的文件夹中的SQL查询生成的,并通过python“上载”/“将该文件上的数据插入MySQL表中。我不想简单地手动上传文件。脚本运行并显示数据处理过程,但当我进入表并尝试搜索时,什么也没有出现。下面是我写的:

cursor = cnx.cursor()

if cnx.is_connected():
    print('Successfully connected to MySQL database')

cursor.execute("create database if not exists Character_Stats;")

cursor.execute("use Character_Stats;")

DB_NAME = 'Character_Stats_DB'
TABLES = {}
cursor.execute('DROP TABLE IF EXISTS Local_Players')

cursor.execute("""CREATE TABLE IF NOT EXISTS `Local_Players` (
  `game_account_id` int,
  `character_key` char(20) DEFAULT NULL,
  `game_region_key` int(20) DEFAULT NULL,
  `character_id` int(20) DEFAULT NULL,
  `class_name` TEXT(20) DEFAULT NULL,
  `specialization_id` int(20) DEFAULT NULL,
  `character_name` TEXT(20) DEFAULT NULL,
  `name` TEXT DEFAULT NULL,
  `character_level` int(20) DEFAULT NULL,
  `total_dmg` int(20) DEFAULT NULL,
  `avg_dmg_per_game` int(20) DEFAULT NULL,
  `total_healing` int(20) DEFAULT NULL,
  `total_dmg_absorbed` int(20) DEFAULT NULL,
  `total_heal_absorbed` int(20) DEFAULT NULL,
  `avg_heal_absorbed_per_game` int(20) DEFAULT NULL,
  `total_killing_blows` int(20) DEFAULT NULL,
  `avg_killing_blows_per_game` int(20) DEFAULT NULL,
  `total_deaths` int(20) DEFAULT NULL,
  `avg_deaths_per_game` int(20) DEFAULT NULL,
  `total_time_hrs` int(20) DEFAULT NULL,
  `total_games_played` int(20) DEFAULT NULL,
  PRIMARY KEY (game_account_id))
  ENGINE = InnoDB""")

cnx.commit()

for data in query:
    with open('Player_stats.csv', 'r', encoding="utf-8", newline='') as playerdata:
        csv_reader = csv.reader(playerdata, delimiter=',')
        for row in csv_reader:
            print(row)
            character_key = row[0]
            game_region_key = row[1]
            character_id = row[2]
            class_name = row[3]
            character_name = row[4]
            realm_key = row[5]
            name = row[6]
            character_level = row[7]
            total_dmg = row[8]
            avg_dmg_per_game = row[9]
            total_healing = row[10]
            avg_healing_per_game = row[11]
            total_dmg_absorbed = row[12]
            total_heal_absorbed = row[13]
            avg_heal_absorbed_per_game = row[14]
            total_killing_blows = row[15]
            avg_killing_blows_per_game = row[16]
            total_deaths = row[17]
            avg_deaths_per_game = row[18]
            total_time_hrs = row[19]
            total_games_played = row[20]
            cursor.execute('''INSERT INTO Character_Stats.Local_Players(character_key,game_region_key
        , character_id, class_name, character_name, realm_key, name, character_level, total_dmg, avg_dmg_per_game, 
        total_healing, avg_healing_per_game, total_dmg_absorbed, total_heal_absorbed, avg_heal_absorbed_per_game, 
        total_killing_blows, avg_killing_blows_per_game, total_deaths, avg_deaths_per_game, total_time_hrs, total_games_played),
        VALUES(%s,%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s)''', multi=True)
            print(data)


print("Data loading complete. \n")
任何帮助都将不胜感激

这是我的CSV的输出:


由于字符串格式错误,无法插入任何内容

cursor.execute('''INSERT INTO Character_Stats.Local_Players(character_key,game_region_key
        , character_id, class_name, character_name, realm_key, name, character_level, total_dmg, avg_dmg_per_game, 
        total_healing, avg_healing_per_game, total_dmg_absorbed, total_heal_absorbed, avg_heal_absorbed_per_game, 
        total_killing_blows, avg_killing_blows_per_game, total_deaths, avg_deaths_per_game, total_time_hrs, total_games_played),
        VALUES(%s,%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s)''' %(character_key,game_region_key
        , character_id, class_name, character_name, realm_key, name, character_level, total_dmg, avg_dmg_per_game, 
        total_healing, avg_healing_per_game, total_dmg_absorbed, total_heal_absorbed, avg_heal_absorbed_per_game, 
        total_killing_blows, avg_killing_blows_per_game, total_deaths, avg_deaths_per_game, total_time_hrs, total_games_played), multi=True)

您忘记分配值,请进行测试,现在应该可以看到数据了。

此代码将用csv文件填充表中的所有列。请尝试阅读这些模块的文档,因为Python是一种非常智能且简单的语言,带有库:

安装pandas、pymsql和sqlalchemy:

pip install sqlalchemy
pip install pymysql
pip install pandas
试试这个:

import pandas as pd
from sqlalchemy import create_engine
connection_string = "mysql+pymysql://%s:%s@%s:%s/%s" % ('user_name','ur_connection_password' , 'host', PORT, 'schema_name')
engine = create_engine(connection_string)
connection = engine.connect()
connection.execute("""
CREATE TABLE IF NOT EXISTS `Local_Players` (
  `game_account_id` int NOT NULL AUTO_INCREMENT,
  `character_key` varchar(20) DEFAULT NULL,
  `game_region_key` int(20) DEFAULT NULL,
  `character_id` int(20) DEFAULT NULL,
  `class_name` TEXT(20) DEFAULT NULL,
  `specialization_id` int(20) DEFAULT NULL,
  `character_name` TEXT(20) DEFAULT NULL,
  `name` TEXT DEFAULT NULL,
  `character_level` int(20) DEFAULT NULL,
  `total_dmg` int(20) DEFAULT NULL,
  `avg_dmg_per_game` int(20) DEFAULT NULL,
  `total_healing` int(20) DEFAULT NULL,
  `total_dmg_absorbed` int(20) DEFAULT NULL,
  `total_heal_absorbed` int(20) DEFAULT NULL,
  `avg_heal_absorbed_per_game` int(20) DEFAULT NULL,
  `total_killing_blows` int(20) DEFAULT NULL,
  `avg_killing_blows_per_game` int(20) DEFAULT NULL,
  `total_deaths` int(20) DEFAULT NULL,
  `avg_deaths_per_game` int(20) DEFAULT NULL,
  `total_time_hrs` int(20) DEFAULT NULL,
  `total_games_played` int(20) DEFAULT NULL,
  PRIMARY KEY (`game_account_id`))""")
pd.read_sql_table(table_name='Local_Players',schema='Test_DB', con=engine)
df = pd.read_csv(r"Player_stats.csv")
df.to_sql(name="Local_Players", if_exists='append', chunksize=1000, con=engine, index=False)

你介意我告诉你另一种更简单的方法吗?你能显示你的玩家_stats.csv吗?@ashishmishra我已经附加了我的CSVMy代码加载工作,如果出现任何错误,你可以执行它和lmk。代码工作完美!非常感谢。在完成所有插入操作后,您需要调用
cnx.commit()
。我尝试了这个方法,收到了相同的结果。脚本运行时,我可以判断它正在拉取数据,但当我进入我的表时,它不在那里。