Sqlite near with syntax error

Issue type: [ ] question [x] bug report [ ] feature request [ ] documentation issue Database system/driver: [ ] cordova [ ] mongodb [ ] mssql [ ] mysql / mariadb [ ] oracle [ ] postgres [ ] cockroa...

Issue type:

[ ] question
[x] bug report
[ ] feature request
[ ] documentation issue

Database system/driver:

[ ] cordova
[ ] mongodb
[ ] mssql
[ ] mysql / mariadb
[ ] oracle
[ ] postgres
[ ] cockroachdb
[x] sqlite
[ ] sqljs
[ ] react-native
[ ] expo

TypeORM version:

[ ] latest
[ ] @next
[x] 0.2.17 (or put your version here)

Steps to reproduce or a small repository showing the problem:

repo : https://github.com/5minlab/typeorm-sqlite-simple-enum-bug

  1. create new typeorm project. I use typeorm init
  2. use simple-enum. I modify src/entity/User.ts
export enum UserType {
    Normal = "normal",
    Admin = "admin",
}

@Entity()
export class User {
    ....
    @Column({
        type: "simple-enum",
        enum: UserType,
    })
    ty: UserType;
}
  1. use sqlite, enable sychronize in ormconfig.json, execute twice.

first execution, working well.

PS F:bugtypeorm-sqlite-simple-enum-bug> npm run start

> sqlite-simple-enum@0.0.1 start F:bugtypeorm-sqlite-simple-enum-bug
> ts-node src/index.ts

Inserting a new user into the database...
Saved a new user with id: 1
Loading users from the database...
Loaded users:  [ User {
    id: 1,
    firstName: 'Timber',
    lastName: 'Saw',
    age: 25,
    ty: 'admin' } ]
Here you can setup and run express/koa/any other framework.

second execution, not working.
SQLITE_ERROR: near "-": syntax error.
simple-enum is included in SQL.

PS F:bugtypeorm-sqlite-simple-enum-bug> npm run start

> sqlite-simple-enum@0.0.1 start F:bugtypeorm-sqlite-simple-enum-bug
> ts-node src/index.ts

{ QueryFailedError: SQLITE_ERROR: near "-": syntax error
    at new QueryFailedError (F:bugtypeorm-sqlite-simple-enum-bugsrcerrorQueryFailedError.ts:9:9)
    at handler (F:bugtypeorm-sqlite-simple-enum-bugsrcdriversqliteSqliteQueryRunner.ts:53:26)
    at replacement (F:bugtypeorm-sqlite-simple-enum-bugnode_modulessqlite3libtrace.js:19:31)
    at Statement.errBack (F:bugtypeorm-sqlite-simple-enum-bugnode_modulessqlite3libsqlite3.js:16:21)
  message: 'SQLITE_ERROR: near "-": syntax error',
  errno: 1,
  code: 'SQLITE_ERROR',
  name: 'QueryFailedError',
  query:
   'CREATE TABLE "temporary_user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "firstName" varchar NOT NULL, "lastName" varchar NOT NULL, "age" integer NOT NULL, "ty" simple-enum CHECK( ty IN ('normal','admin') ) NOT NULL)',
  parameters: [] }

I modify src/driver/sqlite-abstract/AbstractSqliteQueryRunner.ts to fix bug.
but I can’t trust my approach.

5minlab@ed4e91d

За последние 24 часа нас посетили 11509 программистов и 1159 роботов. Сейчас ищут 262 программиста …


  1. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0

    Всем привет! помогите найти ошибку в запросе

    1. $query = $db->query(‘with a as (SELECT * FROM page WHERE (date < 1460365222) AND (cat_url = «zapchasti») AND (id > 141423) ORDER BY id LIMIT 10),
    2.          b as (SELECT * FROM page WHERE (date < 1460365222) AND (cat_url = «zapchasti») ORDER BY id LIMIT (SELECT 10 — COUNT(*) FROM a))
    3. SELECT a.* FROM a union SELECT b.* FROM b’);

    Warning: SQLite3::query(): Unable to prepare statement: 1, near «with»: syntax error

    за ранее благодарю!


  2. Period

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1

    WITH — вроде бы инструкция из майкрософтовского эскуэль-сервера. SQLite её не будет поддерживать. Слишком много от него хотите. Запрос переписывайте.


  3. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0


  4. Period

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1

    Понятно. Я не большой знаток SQLite. Вы просто скопипастили запрос в $db->query и он перестал работать? Не плохо бы туда заглянуть. Другие запросы работают? Возможно есть разница между пхпшным sqllite и тем, в котором вы проверяете эти запросы.


  5. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0

    1. да скопипастил, а надо было? набрать руками, собрать по новой или как?
    2. куда?
    3. другие запросы работаютвозможно! я по этому и обратился за помощью к людям которые могут дать ответ на вопрос


  6. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    даю ответ: WITH в sqlite не работает.

    edited: У МЕНЯ не работает. но есть инфа: Common table expressions were added in 3.8.3
    то есть где-то где установлен свежий sqlite, оно работает. а вообще нет.


  7. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    другими словами, ошибка не в запросе, а в версии sqlite. хочешь — обновляйся. или переписывай запрос на вариант без WITH.


  8. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0

    очень благодарен!
    причина ясна, тему можно закрыть


  9. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    посмотреть используемую версию


  10. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0

    я понял проблему, еще раз спасибо


  11. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    а почему ты думаешь, что помощь нужна только тебе? здесь бывают тысячи людей, находят темы по ключевым словам.


  12. web-ber

    С нами с:
    12 апр 2016
    Сообщения:
    7
    Симпатии:
    0

    я сказал за себя, кому она еще нужна понятия не имею. ну вроде вопрос об удалении темы не стоял. думаю в контексте моего вопроса больше обсуждать нечего (для меня, уточню на всякий случай).
    все вам доброго и спасибо за помощь!

Что не так между кавычками: «sqlite3.OperationalError: near «̀»: syntax error»? Учусь писать бота, по необходимости, но так ничего и не понял что там?

Ignoring exception in on_ready
Traceback (most recent call last):
File «C:UsersKermanAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py», line 343, in _run_event
await coro(*args, **kwargs)
File «C:UsersKermanDesktopZ-coin 0.0.2Discord_Bot.py», line 43, in on_ready
cursor.execute(f»INSERT INTO users VALUES(, ‘‘, ‘ ‘, ‘‘, 0, 0)»)#вводит все данные об участнике в БД
sqlite3.OperationalError: near «̀»: syntax error

  • Вопрос задан более года назад
  • 1872 просмотра

Простой 2 комментария

Во-первых, если ты используешь синтаксис INSERT INTO table VALUES (. ), то список значений должен в точности повторять список столбцов. У тебя порядок явно не совпадает. Используй синтаксис INSERT INTO table (столбец, столбец, . ) VALUES (значение, значение, . ), так проще контролировать правильность запроса.

Во-вторых, никогда не формируй строку запроса с помощью форматирования строк! Это хороший способ заполучить SQL-инъекцию, Бобби Тейблз подтвердит. =) Используй плейсхолдеры (поищи строку «Never do this — insecure!», и почитай рядом).

KerMan_KSP,
server_id INT — ‘‘
Почему в целое поле кладёшь строку? Я же сказал, замени форматирование строк на плейсхолдеры, они сами позаботятся о типах и экранировании.

Далее, ты как, с основами реляционных БД знаком вообще? Если нет, ознакомься. Иначе будешь собирать грабли.
id уникальный для всех записей в таблице? Тогда id INT имеет смысл сделать PRIMARY KEY. Тогда можно будет избавиться от запроса SELECT, использовав синтаксис INSERT OR IGNORE INTO .

Используй синтаксис INSERT INTO table (столбец, столбец, . ) VALUES (значение, значение, . ), так проще контролировать правильность запроса.

Источник

Ошибка SQLite 1: ‘рядом с «)»: синтаксическая ошибка’. ‘

Я делаю школьный проект, но застрял на этой синтаксической ошибке в SQL (я использую SQLite).

Цель этой строки — создать пустую таблицу со столбцами Sandwich_ID , Bread_ID и Sandwich_price . Sandwich_ID является первичным ключом, а Bread_ID указан в таблице Bread .

Сообщение об ошибке:

Microsoft.Data.Sqlite.SqliteException: ‘SQLite Error 1: ‘near «)»: syntax error’.’

Я также пробовал десятичное число вместо числа с плавающей запятой, но по-прежнему ошибка.

Обновлено: теперь я использую ссылку

У меня все еще есть синтаксическая ошибка.

Внешний ключ должен ссылаться на что-то, поэтому определение неполное. Вы также должны использовать decimal / numeric для определения цен.

Я использую SQLite

Я попытался изменить число с плавающей запятой на десятичное, но ошибка все еще возникает

Внешний ключ должен на что-то указывать. Например, здесь кажется, что у вас должна быть таблица «хлебов» или что-то в этом роде:

Я все еще получаю синтаксическую ошибку CREATE TABLE IF NOT EXISTS Breads ( Bread_ID INT, Bread_name VARCHAR(40), Bread_price FLOAT, PRIMARY KEY (Bread_ID) ); CREATE TABLE IF NOT EXISTS Sandwiches ( Sandwich_ID INT, Bread_ID INT, Sandwich_price FLOAT, PRIMARY KEY (Sandwich_ID), FOREIGN KEY (Bread_ID) REFERENCES Breads(Bread_ID) );

Каждое значение, хранящееся в базе данных SQLite (или обрабатываемое ядром базы данных), имеет один из следующих классов хранения:

НОЛЬ. Это значение NULL.

ЦЕЛОЕ. Значение представляет собой целое число со знаком, хранящееся в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.

НАСТОЯЩИЙ. Значение представляет собой значение с плавающей запятой, сохраненное как 8-байтовое число с плавающей запятой IEEE.

ТЕКСТ. Значение представляет собой текстовую строку, хранящуюся с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).

BLOB. Значение — это блок данных, хранящийся точно в том виде, в котором он был введен.

Уточните, пожалуйста, в чем смысл этого перечисления. Обновленный запрос OP работает отлично.

Источник

Понравилась статья? Поделить с друзьями:
  • Sql state hy010 function sequence error
  • Sql state 72000 error code 12899
  • Sql state 08001 sql error code 53
  • Sql standard database services unknown msi error code 43 wincc
  • Sql socket write error