Подтвердить что ты не робот

Загрузка CSV-данных в MySQL в Python

Не уверен, что мне здесь не хватает, но этот код работает без сообщения об ошибке, но в таблице ничего нет. Я загружаю CSV-значения в три столбца в таблицу mysql

import csv
import MySQLdb

mydb = MySQLdb.connect(host='localhost',
    user='root',
    passwd='',
    db='mydb')
cursor = mydb.cursor()

csv_data = csv.reader(file('students.csv'))
for row in csv_data:

    cursor.execute('INSERT INTO testcsv(names, \
          classes, mark )' \
          'VALUES("%s", "%s", "%s")', 
          row)
#close the connection to the database.
cursor.close()
print "Done"

Был бы признателен, если бы кто-то еще мог посмотреть.

Спасибо.

4b9b3361

Ответ 1

Я думаю, вам нужно сделать mydb.commit() всю вставку.

Что-то вроде этого

import csv
import MySQLdb

mydb = MySQLdb.connect(host='localhost',
    user='root',
    passwd='',
    db='mydb')
cursor = mydb.cursor()

csv_data = csv.reader(file('students.csv'))
for row in csv_data:

    cursor.execute('INSERT INTO testcsv(names, \
          classes, mark )' \
          'VALUES("%s", "%s", "%s")', 
          row)
#close the connection to the database.
mydb.commit()
cursor.close()
print "Done"

Ответ 2

Приведенный выше ответ кажется хорошим. Но другой способ сделать это - добавить опцию автоматической фиксации вместе с db connect. Это автоматически фиксирует все остальные операции, выполняемые в БД, избегая использования упоминания sql.commit() каждый раз.

 mydb = MySQLdb.connect(host='localhost',
        user='root',
        passwd='',
        db='mydb',autocommit=true)

Ответ 3

Если это кадр данных pandas, который вы могли бы сделать:

Отправка данных

csv_data.to_sql=(con=mydb, name='<the name of your table>',
  if_exists='replace', flavor='mysql')

чтобы избежать использования for.

Ответ 4

Если у вас нет библиотек pandas и sqlalchemy, импортируйте с помощью pip

> pip install pandas
> pip install sqlalchemy

Мы можем использовать панд и sqlalchemy, чтобы напрямую вставить в базу данных

import csv
import pandas as pd
from sqlalchemy import create_engine,types

engine = create_engine('mysql://root:*Enter password here*@localhost/*Enter Databse name here*') # enter your password and database names here

df = pd.read_csv("Excel_file_name.csv",sep=',',quotechar='\'',encoding='utf8') # Replace Excel_file_name with your excel sheet name
df.to_sql('Table_name',con=engine,index=False,if_exists='append') # Replace Table_name with your sql table name

Ответ 5

  from __future__ import print_function
import csv
import MySQLdb

print("Enter  File  To Be Export")
conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="", db="database")
cursor = conn.cursor()
#sql = 'CREATE DATABASE test1'
sql ='''DROP TABLE IF EXISTS `test1`; CREATE TABLE test1 (policyID int, statecode varchar(255), county varchar(255))'''
cursor.execute(sql)

with open('C:/Users/Desktop/Code/python/sample.csv') as csvfile:
    reader = csv.DictReader(csvfile, delimiter = ',')
    for row in reader:
        print(row['policyID'], row['statecode'], row['county'])
        # insert
        conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="", db="database")
        sql_statement = "INSERT INTO test1(policyID ,statecode,county) VALUES (%s,%s,%s)"
        cur = conn.cursor()
        cur.executemany(sql_statement,[(row['policyID'], row['statecode'], row['county'])])
        conn.escape_string(sql_statement)
        conn.commit()