【问题标题】:Trying to load records from CSV to mysql尝试将记录从 CSV 加载到 mysql
【发布时间】:2014-07-13 23:41:11
【问题描述】:
import csv
import MySQLdb

conn = MySQLdb.connect('localhost','tekno','poop','media')

cursor = conn.cursor()

txt = csv.reader(file('movies.csv'))
for row in txt:
    cursor.execute('insert into shows_and_tv(watched_on,title,score_rating)' 'values     ("%s","%s","%s")',row)

conn.close()

当我运行它时,我得到了

TypeError: not enough arguments for format string

但它匹配

csv 格式如下

dd-mm-yyyy,string,tinyint

监视数据库中的字段

【问题讨论】:

  • 我不懂 python,但是你有 3 个变量占位符(“%s”、“%s”、“%s”)但只有一个变量(行)?我不确定,但我只能看到这似乎不合逻辑
  • 添加print row 看看你会得到什么。
  • @Rook row 可以是tuple(类似这样的:(date,title,int)),可以这样使用。
  • 您还需要答案吗?如果需要,我可以帮助您进一步调整以下答案吗?

标签: mysql csv python-3.x


【解决方案1】:

我没有 mysql 数据库可以玩。所以我做了你需要的,但在 sqlite 中。根据您的需要调整它应该很容易。

import csv
import sqlite3
from collections import namedtuple

conn = sqlite3.connect('statictest.db')
c = conn.cursor()

c.execute('''CREATE TABLE if not exists movies (ID INTEGER PRIMARY KEY AUTOINCREMENT, 'watched_on','title','score_rating')''')

record = namedtuple('record',['watched_on','title','score_rating'])


SQL ='''
INSERT INTO movies ("watched_on","title","score_rating") VALUES (?,?,?)
'''


with open('statictest.csv', 'r') as file:

    read_data = csv.reader(file)
    for row in read_data:
        watched_on, title, score_rating = row
        data = (record(watched_on, title, score_rating))
        c.execute(SQL, data)
        conn.commit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2023-03-31
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多