How to query in Azure cosmos db where query parameter has a single qutoe - azure-cosmosdb

I have a query is azure cosmos db
SELECT * FROM c where c.productConfigId in ('Levi's')
since Levi's contains a single quote, the query is breaking because of the comma. I checked the azure docs and they recommend to use \' to escape but that only seems to work when you have no trailer letter after the comma. Anyone knows the possible solution to this?

I was able to successfully run the query by escaping ' with \'. Here's the query I ran:
SELECT * FROM Root r where r.Content in ('Levi\'s Jeans')
Other alternative is to use double quotes ("). Something like:
SELECT * FROM Root r where r.Content in ("Levi's Jeans")

Related

Heroku Postgres thowing an errror-> message relation "aspnetusers" does not exist from AspNetUsers [duplicate]

I'm trying to run the following PHP script to do a simple database query:
$db_host = "localhost";
$db_name = "showfinder";
$username = "user";
$password = "password";
$dbconn = pg_connect("host=$db_host dbname=$db_name user=$username password=$password")
or die('Could not connect: ' . pg_last_error());
$query = 'SELECT * FROM sf_bands LIMIT 10';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
This produces the following error:
Query failed: ERROR: relation "sf_bands" does not exist
In all the examples I can find where someone gets an error stating the relation does not exist, it's because they use uppercase letters in their table name. My table name does not have uppercase letters. Is there a way to query my table without including the database name, i.e. showfinder.sf_bands?
From what I've read, this error means that you're not referencing the table name correctly. One common reason is that the table is defined with a mixed-case spelling, and you're trying to query it with all lower-case.
In other words, the following fails:
CREATE TABLE "SF_Bands" ( ... );
SELECT * FROM sf_bands; -- ERROR!
Use double-quotes to delimit identifiers so you can use the specific mixed-case spelling as the table is defined.
SELECT * FROM "SF_Bands";
Re your comment, you can add a schema to the "search_path" so that when you reference a table name without qualifying its schema, the query will match that table name by checked each schema in order. Just like PATH in the shell or include_path in PHP, etc. You can check your current schema search path:
SHOW search_path
"$user",public
You can change your schema search path:
SET search_path TO showfinder,public;
See also http://www.postgresql.org/docs/8.3/static/ddl-schemas.html
I had problems with this and this is the story (sad but true) :
If your table name is all lower case like : accounts
you can use: select * from AcCounTs and it will work fine
If your table name is all lower case like : accounts
The following will fail:
select * from "AcCounTs"
If your table name is mixed case like : Accounts
The following will fail:
select * from accounts
If your table name is mixed case like : Accounts
The following will work OK:
select * from "Accounts"
I dont like remembering useless stuff like this but you have to ;)
Postgres process query different from other RDMS. Put schema name in double quote before your table name like this, "SCHEMA_NAME"."SF_Bands"
Put the dbname parameter in your connection string. It works for me while everything else failed.
Also when doing the select, specify the your_schema.your_table like this:
select * from my_schema.your_table
If a table name contains underscores or upper case, you need to surround it in double-quotes.
SELECT * from "Table_Name";
I had a similar problem on OSX but tried to play around with double and single quotes. For your case, you could try something like this
$query = 'SELECT * FROM "sf_bands"'; // NOTE: double quotes on "sf_Bands"
This is realy helpfull
SET search_path TO schema,public;
I digged this issues more, and found out about how to set this "search_path" by defoult for a new user in current database.
Open DataBase Properties then open Sheet "Variables"
and simply add this variable for your user with actual value.
So now your user will get this schema_name by defoult and you could use tableName without schemaName.
You must write schema name and table name in qutotation mark. As below:
select * from "schemaName"."tableName";
I had the same issue as above and I am using PostgreSQL 10.5.
I tried everything as above but nothing seems to be working.
Then I closed the pgadmin and opened a session for the PSQL terminal.
Logged into the PSQL and connected to the database and schema respectively :
\c <DATABASE_NAME>;
set search_path to <SCHEMA_NAME>;
Then, restarted the pgadmin console and then I was able to work without issue in the query-tool of the pagadmin.
For me the problem was, that I had used a query to that particular table while Django was initialized. Of course it will then throw an error, because those tables did not exist. In my case, it was a get_or_create method within a admin.py file, that was executed whenever the software ran any kind of operation (in this case the migration). Hope that helps someone.
In addition to Bill Karwin's answer =>
Yes, you should surround the table name with double quotes. However, be aware that most probably php will not allow you to just write simply:
$query = "SELECT * FROM "SF_Bands"";
Instead, you should use single quotes while surrounding the query as sav said.
$query = 'SELECT * FROM "SF_Bands"';
You have to add the schema first e.g.
SELECT * FROM place.user_place;
If you don't want to add that in all queries then try this:
SET search_path TO place;
Now it will works:
SELECT * FROM user_place;
Easiest workaround is Just change the table name and all column names to lowercase and your issue will be resolved.
For example:
Change Table_Name to table_name and
Change ColumnName to columnname
It might be silly for a few, but in my case - once I created the table I could able to query the table on the same session, but if I relogin with new session table does not exits.
Then I used commit just after creating the table and now I could able to find and query the table in the new session as well. Like this:
select * from my_schema.my_tbl;
Hope this would help a few.
Make sure that Table name doesn't contain any trailing whitespaces
Try this: SCHEMA_NAME.TABLE_NAME
I'd suggest checking if you run the migrations or if the table exists in the database.
I tried every good answer ( upvote > 10) but not works.
I met this problem in pgAdmin4.
so my solution is quite simple:
find the target table / scheme.
mouse right click, and click: query-tool
in this new query tool window, you can run your SQL without specifying set search_path to <SCHEMA_NAME>;
you can see the result:

Sanitizing string parameters in Cosmos DB to avoid SQL injection

I have an application in which a Cosmos DB SQL Query is constructed dynamically, with some parts coming from untrusted user input. These parts are all string parameters in the WHERE clause and always enclosed in single quotes. For example:
SELECT * FROM c WHERE
c.prop1 = '{userInput1}' AND
STARTSWITH(c['{userInput2}'], '{userInput3}')
For various reasons it's not possible to use library features like SqlParameter to sanitize the user input, which obviously would be the ideal solution.
But given this constraint, would it be sufficient to escape backslashes and single quotes in the user input, i.e. replace \ by \\ and ' by \' , in order to avoid all SQL injection attacks?
(Updated to reflect the comment by #404)

Quickbooks and pyodbc LIKE pattern matching

I'm using pyodbc to run some queries against Quickbooks and having some issues with pattern matching, specifically with square bracket wildcards. I don't even know if I'm allowed to use square bracket wildcards or where I would go to find that answer. The pyodbc docs don't show any examples using them from what I can see. The only wildcard that seems to work that I've tried is %.
I'm trying to build a pattern to match on these two strings:
M-100
J-100
This is the query that is returning no rows:
cursor.execute("SELECT ListID,FullName from ItemInventoryAssembly WHERE Name LIKE ?", '[MJ]-100')
These queries do return rows:
cursor.execute("SELECT ListID,FullName from ItemInventoryAssembly WHERE Name LIKE ?", 'M-100')
cursor.execute("SELECT ListID,FullName from ItemInventoryAssembly WHERE Name LIKE ?", 'J-100')
Do I have to use the following instead of [] wildcards? (I have many more names to match on and this query would end up being very long and ugly.)
cursor.execute("SELECT ListID,FullName from ItemInventoryAssembly WHERE Name LIKE ? OR Name LIKE ?", ('M-100','J-100'))
Additionally, where would I go to find which wildcards I'm allowed to use in my setup with pyodbc and Quickbooks?

Escape symbol in documentdb query

How do I query on a property that contains a '-' symbol.
Specifically I want to perform this query:
SELECT * FROM c.inside.abs-humid
But this gives me an error.
Querying on properties without dash is working perfectly fine, how do i do this?
DocumentDB uses JSON notation for escaping property names. Try:
SELECT * FROM c.inside["abs-humid"]

How to perform SQLite LIKE queries with wildcards not read as wildcards

I'm running into a problem in SQLite when querying on text fields that happen to have the _ or % wildcard characters.
I have a table with a 'Name' field I want to query on. Two of my records have the value 'test' and 'te_t' in the 'Name' field I want to query on. If I run a query like below
"SELECT ALL * from Table WHERE Name LIKE 'te_t'"
This will return both the 'te_t' and 'test' records, because of '_' being read as a wildcard. How do I make it so that I only get the 'te_t' record from the above query?
I've done some research on this and read that I should be able to throw a backslash '\' character in front of the wildcard to get it to be read as a normal _ character instead of a wildcard. But when I try the query
"SELECT ALL * from Table WHERE Name LIKE 'te\_t'"
my query returns zero matches.
What am I doing wrong? Is this just not possible in SQLite?
In SQL, you can escape special characters in the LIKE pattern if you declare some escape character with ESCAPE:
SELECT * FROM MyTable WHERE Name LIKE 'te\_t' ESCAPE '\'
(see the documentation)

Resources