gpt4 book ai didi

mysql - 使用带有 'multi=True' 参数的execute() 函数创建时出现“表不存在”

转载 作者:行者123 更新时间:2023-11-29 15:15:17 25 4
gpt4 key购买 nike

MySQL 5.6。

我不明白为什么如果我使用multi=True则不会创建参数表。我在文档中没有找到有关它的任何信息。如果我将所有查询分开,它会起作用,但我不想将它们分开。

from mysql import connector as connector

conn = connector.connect(
user='root',
password='root',
host='127.0.0.1',
database='ra'
)
conn.autocommit = True
cursor = conn.cursor(dictionary=True, buffered=True)

sql = """
DROP TABLE IF EXISTS tab01;
CREATE TABLE tab01 (nzu DECIMAL(5,0) PRIMARY KEY,
nbr DECIMAL(3,0) DEFAULT NULL,
nland DECIMAL(5,0) DEFAULT NULL,
nlandtype DECIMAL(5,0) DEFAULT NULL,
nzuarea DECIMAL(12,1) DEFAULT NULL,
nzuareaos DECIMAL(12,1) DEFAULT NULL) ENGINE = MyISAM;
INSERT INTO tab01 (SELECT zu.nzu, zu.nbr, zu.nland,
IF(ISNULL(lands.nlandtype),0,lands.nlandtype) AS nlandtype,
0.0 AS nzuarea, 0.0 AS nzuareaos
FROM (SELECT * FROM zu WHERE nhoz = '6204000001') AS zu
LEFT JOIN lands AS lands ON zu.nland=lands.nland
ORDER BY nzu);
"""
cursor.execute(sql, multi=True)
cursor.execute('SELECT * FROM tab01')
# mysql.connector.errors.ProgrammingError: 1146 (42S02): Table 'ra.tab01' doesn't exist
result = cursor.fetchone()

最佳答案

您确定您的CREATE有效吗?我相信 ENGINE 选项必须位于 CREATE 语句的末尾:

CREATE TABLE tab01 (
nzu DECIMAL(5,0) PRIMARY KEY,
nbr DECIMAL(3,0) DEFAULT NULL,
nland DECIMAL(5,0) DEFAULT NULL,
nlandtype DECIMAL(5,0) DEFAULT NULL,
nzuarea DECIMAL(12,1) DEFAULT NULL,
nzuareaos DECIMAL(12,1) DEFAULT NULL
) ENGINE = MyISAM;

还有这个声明:

cursor.execute(sql, multi=True)

在结果上创建一个迭代器。它看起来像是惰性的(即,它只在需要时执行 SQL 语句)。您永远不会询问第二条语句的结果,因此它只执行第一条语句。尝试:

for _ in cursor.execute(sql, multi=True): pass

关于mysql - 使用带有 'multi=True' 参数的execute() 函数创建时出现“表不存在”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59716195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com