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
- create new typeorm project. I use
typeorm init
- 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; }
- 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 программиста …
-
- С нами с:
- 12 апр 2016
- Сообщения:
- 7
- Симпатии:
- 0
Всем привет! помогите найти ошибку в запросе
-
$query = $db->query(‘with a as (SELECT * FROM page WHERE (date < 1460365222) AND (cat_url = «zapchasti») AND (id > 141423) ORDER BY id LIMIT 10),
-
b as (SELECT * FROM page WHERE (date < 1460365222) AND (cat_url = «zapchasti») ORDER BY id LIMIT (SELECT 10 — COUNT(*) FROM a))
-
SELECT a.* FROM a union SELECT b.* FROM b’);
Warning: SQLite3::query(): Unable to prepare statement: 1, near «with»: syntax error
за ранее благодарю!
-
- С нами с:
- 29 дек 2014
- Сообщения:
- 148
- Симпатии:
- 1
WITH — вроде бы инструкция из майкрософтовского эскуэль-сервера. SQLite её не будет поддерживать. Слишком много от него хотите. Запрос переписывайте.
-
- С нами с:
- 12 апр 2016
- Сообщения:
- 7
- Симпатии:
- 0
-
- С нами с:
- 29 дек 2014
- Сообщения:
- 148
- Симпатии:
- 1
Понятно. Я не большой знаток SQLite. Вы просто скопипастили запрос в $db->query и он перестал работать? Не плохо бы туда заглянуть. Другие запросы работают? Возможно есть разница между пхпшным sqllite и тем, в котором вы проверяете эти запросы.
-
- С нами с:
- 12 апр 2016
- Сообщения:
- 7
- Симпатии:
- 0
1. да скопипастил, а надо было? набрать руками, собрать по новой или как?
2. куда?
3. другие запросы работаютвозможно! я по этому и обратился за помощью к людям которые могут дать ответ на вопрос -
Команда форума
Модератор- С нами с:
- 11 июн 2010
- Сообщения:
- 10.827
- Симпатии:
- 1.174
- Адрес:
- там-сям
даю ответ: WITH в sqlite не работает.
edited: У МЕНЯ не работает. но есть инфа: Common table expressions were added in 3.8.3
то есть где-то где установлен свежий sqlite, оно работает. а вообще нет. -
Команда форума
Модератор- С нами с:
- 11 июн 2010
- Сообщения:
- 10.827
- Симпатии:
- 1.174
- Адрес:
- там-сям
другими словами, ошибка не в запросе, а в версии sqlite. хочешь — обновляйся. или переписывай запрос на вариант без WITH.
-
- С нами с:
- 12 апр 2016
- Сообщения:
- 7
- Симпатии:
- 0
очень благодарен!
причина ясна, тему можно закрыть -
Команда форума
Модератор- С нами с:
- 11 июн 2010
- Сообщения:
- 10.827
- Симпатии:
- 1.174
- Адрес:
- там-сям
посмотреть используемую версию
-
- С нами с:
- 12 апр 2016
- Сообщения:
- 7
- Симпатии:
- 0
я понял проблему, еще раз спасибо
-
Команда форума
Модератор- С нами с:
- 11 июн 2010
- Сообщения:
- 10.827
- Симпатии:
- 1.174
- Адрес:
- там-сям
а почему ты думаешь, что помощь нужна только тебе? здесь бывают тысячи людей, находят темы по ключевым словам.
-
- С нами с:
- 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 работает отлично.
Источник