The line of code is the following:
conn.execute('''CREATE TABLE summury (set , avarageApproxAlg1Opt, optFound, maxApprox, range1, range2, range3, range4);''')
It's in a Python script and it complains about my sintax:
sqlite3.OperationalError: near "set": syntax error
I'm not experienced in SQL and I cannot understand what's wrong there.
Sorry for the quality of the question, but.. any help?
Thanks in advance.
set is a keyword in SQL. Either rename the column, or put it in "double quotes".
Related
I have the following task in my DAG:
create_features_table = PostgresOperator(
task_id="create_features_table",
postgres_conn_id="featuredb",
sql="src/test.sql "
)
But when I test the task, I get this error:
psycopg2.errors.SyntaxError: syntax error at or near "src"
LINE 1: src/test.sql
The content of the test.sql script is:
CREATE TABLE test(
C1 int,
C2 int,
);
I can't point out the error in the syntax, but that's because it is my first DAG. Any help would be greatly appreciated.
If I run the script directly from the postgres container's psql using "\i src/text.sql" it works fine.
I have tested the connection from the airflow web server and the connection works.
I found that I had to put a space before closing the quotes to avoid a jinja2.exeptions.TemplateNotFound error, but haven't been able to find the syntax error.
According to documentation (https://airflow.apache.org/docs/apache-airflow-providers-postgres/stable/_api/airflow/providers/postgres/operators/postgres/index.html#airflow.providers.postgres.operators.postgres.PostgresOperator)
if you are defining your sql script path, it must ends with .sql
You have a white space in your path in the end so Operatort things it’s a query to be executed on your postgre, not file with query. You can see it in the response from postgre. Run this query on your postgre instance src/test.sql and you will get the same syntax error.
You can fix it easily by removing that white space
sql="src/test.sql"
I have a text file that contains some basic passwords and some variants of those basic passwords. They are typed out together like this:
qwerty, qwerty1
password, password1
default, default 1
123, 12345, 123456
I am trying to take these values and split them, storing them in a tuple and then print out the values as 'Password' and then any variants, but I am getting a syntax error on the print BIF? (I am aware this will not print out the password '123456', I am just trying to solve the syntax error first.)
for each_line in passwords:
(passwd, passwd_variant) = each_line.split(',',1)
print(f'Password: {passwd}, Variant {passwd_variant}')
SyntaxError: invalid syntax
normally if I was writing a script, in the editor I would put print on a new line, however a new line in IDLE simply executes the code above it. is there a shortcut or something to do a carriage return and write the print statement on a new line and if so, is that the cause of the syntax error and why?
Cheers
EDIT: I would like my output to be this
Finally discovered that you need to hit Enter after the for in statement, this will then take you to a new line inside for in statement. Was up all night trying to work it out, maybe my fresh brain helped this morning.
I'm new to AutoIp and wonder what the parameters that often come with the #ComSpec macro mean. I couldn't find an explanation on the web. So any hint regarding /c, /k and maybe others?
Thanks a lot.
#ComSpec is the value of %COMSPEC%; the specified secondary command interpreter.
(For example: C:\Windows\system32\cmd.exe)
A quick search on "cmd.exe arguments" should give you plenty of info.
I've written a simple trigger using HDBC and Sqlite3.
calculateNoOfStocksTraded::Database.HDBC.Sqlite3.Connection->IO Integer
calculateNoOfStocksTraded conn=do
run conn "CREATE TRIGGER calStocks\
\AFTER INSERT ON historicalData\
\FOR EACH ROW\
\BEGIN\
\UPDATE company\
\SET noOfStocks=300.0;\
\END " []
It keeps saying that there's a syntax error. I don't know how to figure it out. pls help me to locate the error
The pieces of your SQL strings are being run together without spaces between them (because that's how the string breaks with \ work in Haskell). Try adding a space at the end of each line of the query, before the \.
Is there a way to check the syntax of a SQLite3 script without running it?
Basically, I'm looking for the SQLite3 equivalent of ruby -c script.rb, perl -c script.pl, php --syntax-check script.php, etc.
I've thought of using explain, but most of the scripts I'd like to check are kept around for reference purposes (and don't necessarily have an associated database). Using explain would also make it hard to use with something like Syntastic. (That is, I'm only wanting to check syntax, not semantics.)
Update:
I'm confused. Let's say I want to syntax check this:
select * from foo;
I could do something like:
echo 'explain select * from foo;' | sqlite3
But then I get:
SQL error near line 1: no such table: foo
All I'd expect to see is "Syntax OK" (or something similar). Is that possible?
A syntax checker that works well for me so far is the Ruby gem sqlint
It checks ANSI SQL: it is not specific to the sqlite dialect.
It came out in 2015, 5 years after the question was asked
It needs Ruby and a C compiler (to build the pg_query native extension.)
Here is an example of output:
$ sqlint ex7a.sql
ex7a.sql:81:10:ERROR syntax error at or near "*"
In the true Unix tradition, if the syntax is correct, sqlint produces no output. As the questioner asked, it doesn't check if tables exist.
As you mentioned, you can use the EXPLAIN keyword. It will return information about how the statement would be executed had you omitted the preceding EXPLAIN keyword.
You could probably use EXPLAIN against an in memory database. With sqlite3, you can get an in memory database by passing ":memory:" as the filename to sqlite3_open_v2().