Не могу вставить в базу данных AccessPython

Программы на Python
Ответить
Anonymous
 Не могу вставить в базу данных Access

Сообщение Anonymous »

У меня есть база данных Access (.mdb), созданная и отправленная мне кем-то другим. Я пробовал запустить его как в nodejs с node-adodb, так и с python и pyodbc, и получаю ошибку. Вот мой вопрос:
insert into sets (id, abbr, [name], [date], legality, path) values ( (SELECT max(id) + 1 FROM sets), 'ASD', 'The Name', '2025.01.01', '++++', 'path\\to\\file' )

Я получаю следующую ошибку:
[HY000] [Microsoft][ODBC Microsoft Access Driver] Query input must contain at least one table or query. (-3025) (SQLExecDirectW)

Если я изменю:
(SELECT max(id) + 1 FROM sets)

на жестко закодированный номер, например:
1033

это работает. Разве Access не может обработать получение следующего идентификационного номера в инструкции вставки? Одна из проблем заключается в том, что в столбце id не установлено поле автонумерации, и мне приходится устанавливать его вручную.
Вот код:
узел:
const adodb = require('node-adodb');

var cn = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + process.env.ACCESS_DB_FILENAME + ';';

var connection = adodb.open(cn);
var q = `insert into sets (id, abbr, [name], [date], legality, path) values ( (SELECT max(id) + 1 FROM sets), 'ASD', 'The Name', '2025.01.01', '++++', 'path\\to\\file' )`
var ins = await connection.query(q).then((data) => {
console.log(data)
return data
}).catch(err => {
console.error(JSON.stringify(err))
})

Я получаю
{"process":{"code":-2147467259,"message":"Unspecified error"},"exitCode":0}
python:
import pyodbc

driver = "Microsoft Access Driver (*.mdb, *.accdb)"
path = "c:\\path\\to\\file.mdb"

conn = pyodbc.connect(f"Driver={driver};DBQ={path};")

conn.setdecoding(pyodbc.SQL_CHAR, encoding='latin1')
conn.setencoding('latin1')

cursor = conn.cursor()

sql = "insert into sets (id, abbr, [name], [date], legality, path) values ( (SELECT max(id) + 1 FROM sets), 'ASDF', 'The Name', '2025.01.01', '++++', 'path\\to\\file' )"
print(sql)

res = cursor.execute(sql)
conn.commit()

Я получаю:
pyodbc.Error: ('HY000', '[HY000] [Microsoft][ODBC Microsoft Access Driver] Query input must contain at least one table or query. (-3025) (SQLExecDirectW)')


Подробнее здесь: https://stackoverflow.com/questions/798 ... s-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»