INSERT SELECT * FROM ON DUPLICATE 结果错误 1136
INSERT SELECT * FROM ON DUPLICATE Results in Error 1136
我正在尝试 insert/update 将 df 转换为 mysql table。我收到这个错误
"_mysql_exceptions.OperationalError: (1136, "Column count doesn't match value count at row 1")"
在下面代码的执行行。关于解决方法或更好方法的任何建议?
db = MySQLdb.connect(
host = "myhost",
user = "username",
passwd = "password",
db = "mydb",
charset='utf8'
)
df.to_sql(con=db, name='t', if_exists='replace', flavor='mysql')
sqlStatement = """INSERT INTO db.films SELECT t.* FROM db.t
ON DUPLICATE KEY UPDATE
films.releasedP=t.releasedP,
films.runtimeP=t.runtimeP,
films.imdbRatingP=t.imdbRatingP,
films.votesYearP=t.votesYearP,
films.years=t.years,
films.votesYear=t.votesYear
;"""
cursor = db.cursor()
cursor.execute(sqlStatement)
db.commit()
这是我正在尝试 insert/update 数据的 table 的架构。
DESCRIBE db.t;
+----------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+-------+
| Title | varchar(63) | YES | | NULL | |
| imdbID | varchar(63) | YES | | NULL | |
| Released | varchar(63) | YES | | NULL | |
| Runtime | varchar(63) | YES | | NULL | |
| imdbRating | varchar(63) | YES | | NULL | |
| imdbVotes | varchar(63) | YES | | NULL | |
| releasedDateTime | datetime | YES | | NULL | |
| maxDateTime | datetime | YES | | NULL | |
| years | float | YES | | NULL | |
| votesYear | float | YES | | NULL | |
| rating | float | YES | | NULL | |
| runtimeF | float | YES | | NULL | |
| releasedP | float | YES | | NULL | |
| runtimeP | float | YES | | NULL | |
| imdbRatingP | float | YES | | NULL | |
| votesYearP | float | YES | | NULL | |
+----------------------------+-------------+------+-----+---------+-------+
DESCRIBE db.films;
+----------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+-------+
| Actors | varchar(63) | YES | | NULL | |
| Awards | varchar(63) | YES | | NULL | |
| Country | varchar(63) | YES | | NULL | |
| Director | varchar(63) | YES | | NULL | |
| Genre | varchar(63) | YES | | NULL | |
| Language | varchar(63) | YES | | NULL | |
| Metascore | varchar(63) | YES | | NULL | |
| Plot | varchar(63) | YES | | NULL | |
| Poster | varchar(63) | YES | | NULL | |
| Rated | varchar(63) | YES | | NULL | |
| Released | varchar(63) | YES | | NULL | |
| Response | varchar(63) | YES | | NULL | |
| Runtime | varchar(63) | YES | | NULL | |
| Title | varchar(63) | YES | | NULL | |
| Type | varchar(63) | YES | | NULL | |
| Writer | varchar(63) | YES | | NULL | |
| Year | varchar(63) | YES | | NULL | |
| imdbID | varchar(63) | YES | UNI | NULL | |
| imdbRating | varchar(63) | YES | | NULL | |
| imdbVotes | varchar(63) | YES | | NULL | |
| years | float | YES | | NULL | |
| votesYear | float | YES | | NULL | |
| rating | float | YES | | NULL | |
| runtimeF | float | YES | | NULL | |
| releasedP | float | YES | | NULL | |
| runtimeP | float | YES | | NULL | |
| imdbRatingP | float | YES | | NULL | |
| votesYearP | float | YES | | NULL | |
| releasedDateTime | datetime | YES | | NULL | |
| maxDateTime | datetime | YES | | NULL | |
+----------------------------+-------------+------+-----+---------+-------+
table db.films
和 db.t
的架构不匹配。因此,您需要定义 table db.films
的哪些列将设置为 table ``.
中的哪个值
试试这个查询:
INSERT INTO db.films (
Title,
imdbID,
Released,
Runtime,
imdbRating,
imdbVotes,
releasedDateTime,
maxDateTime,
years,
votesYear,
rating,
runtimeF,
releasedP,
runtimeP,
imdbRatingP,
votesYearP
)
SELECT
Title,
imdbID,
Released,
Runtime,
imdbRating,
imdbVotes,
releasedDateTime,
maxDateTime,
years,
votesYear,
rating,
runtimeF,
releasedP,
runtimeP,
imdbRatingP,
votesYearP
FROM db.t
ON DUPLICATE KEY UPDATE
films.releasedP=t.releasedP,
films.runtimeP=t.runtimeP,
films.imdbRatingP=t.imdbRatingP,
films.votesYearP=t.votesYearP,
films.years=t.years,
films.votesYear=t.votesYear
我正在尝试 insert/update 将 df 转换为 mysql table。我收到这个错误
"_mysql_exceptions.OperationalError: (1136, "Column count doesn't match value count at row 1")"
在下面代码的执行行。关于解决方法或更好方法的任何建议?
db = MySQLdb.connect(
host = "myhost",
user = "username",
passwd = "password",
db = "mydb",
charset='utf8'
)
df.to_sql(con=db, name='t', if_exists='replace', flavor='mysql')
sqlStatement = """INSERT INTO db.films SELECT t.* FROM db.t
ON DUPLICATE KEY UPDATE
films.releasedP=t.releasedP,
films.runtimeP=t.runtimeP,
films.imdbRatingP=t.imdbRatingP,
films.votesYearP=t.votesYearP,
films.years=t.years,
films.votesYear=t.votesYear
;"""
cursor = db.cursor()
cursor.execute(sqlStatement)
db.commit()
这是我正在尝试 insert/update 数据的 table 的架构。
DESCRIBE db.t;
+----------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+-------+
| Title | varchar(63) | YES | | NULL | |
| imdbID | varchar(63) | YES | | NULL | |
| Released | varchar(63) | YES | | NULL | |
| Runtime | varchar(63) | YES | | NULL | |
| imdbRating | varchar(63) | YES | | NULL | |
| imdbVotes | varchar(63) | YES | | NULL | |
| releasedDateTime | datetime | YES | | NULL | |
| maxDateTime | datetime | YES | | NULL | |
| years | float | YES | | NULL | |
| votesYear | float | YES | | NULL | |
| rating | float | YES | | NULL | |
| runtimeF | float | YES | | NULL | |
| releasedP | float | YES | | NULL | |
| runtimeP | float | YES | | NULL | |
| imdbRatingP | float | YES | | NULL | |
| votesYearP | float | YES | | NULL | |
+----------------------------+-------------+------+-----+---------+-------+
DESCRIBE db.films;
+----------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+-------+
| Actors | varchar(63) | YES | | NULL | |
| Awards | varchar(63) | YES | | NULL | |
| Country | varchar(63) | YES | | NULL | |
| Director | varchar(63) | YES | | NULL | |
| Genre | varchar(63) | YES | | NULL | |
| Language | varchar(63) | YES | | NULL | |
| Metascore | varchar(63) | YES | | NULL | |
| Plot | varchar(63) | YES | | NULL | |
| Poster | varchar(63) | YES | | NULL | |
| Rated | varchar(63) | YES | | NULL | |
| Released | varchar(63) | YES | | NULL | |
| Response | varchar(63) | YES | | NULL | |
| Runtime | varchar(63) | YES | | NULL | |
| Title | varchar(63) | YES | | NULL | |
| Type | varchar(63) | YES | | NULL | |
| Writer | varchar(63) | YES | | NULL | |
| Year | varchar(63) | YES | | NULL | |
| imdbID | varchar(63) | YES | UNI | NULL | |
| imdbRating | varchar(63) | YES | | NULL | |
| imdbVotes | varchar(63) | YES | | NULL | |
| years | float | YES | | NULL | |
| votesYear | float | YES | | NULL | |
| rating | float | YES | | NULL | |
| runtimeF | float | YES | | NULL | |
| releasedP | float | YES | | NULL | |
| runtimeP | float | YES | | NULL | |
| imdbRatingP | float | YES | | NULL | |
| votesYearP | float | YES | | NULL | |
| releasedDateTime | datetime | YES | | NULL | |
| maxDateTime | datetime | YES | | NULL | |
+----------------------------+-------------+------+-----+---------+-------+
table db.films
和 db.t
的架构不匹配。因此,您需要定义 table db.films
的哪些列将设置为 table ``.
试试这个查询:
INSERT INTO db.films (
Title,
imdbID,
Released,
Runtime,
imdbRating,
imdbVotes,
releasedDateTime,
maxDateTime,
years,
votesYear,
rating,
runtimeF,
releasedP,
runtimeP,
imdbRatingP,
votesYearP
)
SELECT
Title,
imdbID,
Released,
Runtime,
imdbRating,
imdbVotes,
releasedDateTime,
maxDateTime,
years,
votesYear,
rating,
runtimeF,
releasedP,
runtimeP,
imdbRatingP,
votesYearP
FROM db.t
ON DUPLICATE KEY UPDATE
films.releasedP=t.releasedP,
films.runtimeP=t.runtimeP,
films.imdbRatingP=t.imdbRatingP,
films.votesYearP=t.votesYearP,
films.years=t.years,
films.votesYear=t.votesYear