Thread: [SQLObject] URI connection syntax, double slashes and relative pathnames on windows
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <ab...@ne...> - 2005-06-10 05:33:26
|
(I am reposting this into a new thread since the old post was a subpart o= f a thread on a totally unrelated topic, and thus seems to have been forgotte= n) It seems that "sqlite://file" style connection strings (I am on windows) * only actually work if its a single slash (despite the doco!) * don't let you put the db in the same directory or a relative direc= tory Brian Beck wrote: > Also, I'm pretty sure the connection syntax Andy used is the only way = to > specify a relative path. I also use that form when using SQLObject wit= h > Windows. =20 Indeed that's right - the syntax I originally used =20 from sqlobject.sqlite import builder; SQLiteConnection =3D builder() conn =3D SQLiteConnection("persontest3.db", debug=3DFalse) =20 whilst convoluted, at least lets me specify that the db be in the same di= rectory as my source code. So whilst the shorter syntax works - I"ve since disco= vered that it actually creates the db file in the root of my windows C: drive! = Not what I want. P.S. I am on windows. =20 conn =3D "sqlite:/persontest3.db?debug=3D" =20 Also, I"m still not clear as to why the documentation refers to a double = slash // but in actual use, only a single slash actually works. E.g. the code l= ine above works, but if you put in // it won"t work. =20 Note that when specifying a full pathname, it seems that either double or= single path will work. e.g. conn =3D "sqlite://C|/person test/persontest3.db" OR conn =3D "sqlite:/C|/person test/persontest3.db" =20 In summary: It seems that "sqlite://file" style connection strings=20 * only actually work if its a single slash * a double OR single slash may be used if you specify the full pathn= ame * don't let you put the db in the same directory or a relative direc= tory P.S. Running under windows XP. -Andy Bulka http://www.atug.com/andypatterns ------------------------------------------------------------ This email was sent from Netspace Webmail: http://www.netspace.net.au |
From: Jamie W. <ja...@sp...> - 2005-06-10 06:25:08
|
This one time, at band camp, ab...@ne... wrote: >(I am reposting this into a new thread since the old post was a subpart of a >thread on a totally unrelated topic, and thus seems to have been forgotten) > >It seems that "sqlite://file" style connection strings (I am on windows) > * only actually work if its a single slash (despite the doco!) > * don't let you put the db in the same directory or a relative directory > >Brian Beck wrote: > > Also, I'm pretty sure the connection syntax Andy used is the only way to > > specify a relative path. I also use that form when using SQLObject with > > Windows. > >Indeed that's right - the syntax I originally used > > from sqlobject.sqlite import builder; SQLiteConnection = builder() > conn = SQLiteConnection("persontest3.db", debug=False) > >whilst convoluted, at least lets me specify that the db be in the same directory >as my source code. So whilst the shorter syntax works - I"ve since discovered >that it actually creates the db file in the root of my windows C: drive! Not >what I want. P.S. I am on windows. I've seen the exact same behavour on Linux, where the first / in the url is used in the path regardless of how many you put: sqlite:/ sqlite:// both insert a slash at the start of the pathname. I'd propose that "sqlite://" only specifies the protocol, and anything after the double-slash is the path so that: sqlite://foo points to the database file foo in the current directory, and sqlite:///var/tmp/foo points to the full path /var/tmp/foo |
From: Oleg B. <ph...@ma...> - 2005-06-10 08:24:07
|
On Fri, Jun 10, 2005 at 04:24:46PM +1000, Jamie Wilkinson wrote: > sqlite://foo > > points to the database file foo in the current directory, and This points to a host "foo"... which is meaningles for sqlite... Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Jamie W. <ja...@sp...> - 2005-06-11 04:02:49
|
This one time, at band camp, Oleg Broytmann wrote: >On Fri, Jun 10, 2005 at 04:24:46PM +1000, Jamie Wilkinson wrote: >> sqlite://foo >> >> points to the database file foo in the current directory, and > > This points to a host "foo"... which is meaningles for sqlite... No it doesn't. It says the uri schema is sqlite and the rest is up to you. file:// URIs don't have a host component. I'm suggesting that sqlite:// URIs should work the same as file://, and let you have both relative and absolute paths in them. |
From: Oleg B. <ph...@ph...> - 2005-06-13 16:15:00
|
On Sat, Jun 11, 2005 at 02:02:33PM +1000, Jamie Wilkinson wrote: > file:// URIs don't have a host component. It does have. Try ftp://some.host/path/to/sub/dir in different browsers. Some recognize this as ftp:// URL, some ignore some.host part, some use some.host part as a relative path. Ambiguous. :( Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Jamie W. <ja...@sp...> - 2005-06-14 02:11:01
|
This one time, at band camp, Oleg Broytmann wrote: >On Sat, Jun 11, 2005 at 02:02:33PM +1000, Jamie Wilkinson wrote: >> file:// URIs don't have a host component. > > It does have. Try ftp://some.host/path/to/sub/dir in different >browsers. Some recognize this as ftp:// URL, some ignore some.host >part, some use some.host part as a relative path. Ambiguous. :( file://, not ftp://. But I re-read rfc 1738 and it turns out I was wrong; there is still a host component, between the first pair of / and the next /, i.e. file:/// is an absolute path and file://x/y is also the absolute path on server x. |
From: Oleg B. <ph...@ma...> - 2005-06-14 03:47:15
|
On Tue, Jun 14, 2005 at 12:10:34PM +1000, Jamie Wilkinson wrote: > > It does have. Try ftp://some.host/path/to/sub/dir in different > >browsers. > > file://, not ftp://. Yes, sorry. I've really tried file://ftp.sai.msu.su/pub in different browsers - links, elinks, lynx, Mozilla and python's urllib.py... Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Ryan T. <rto...@gm...> - 2005-06-13 18:24:56
|
On Jun 11, 2005, at 12:02 AM, Jamie Wilkinson wrote: > This one time, at band camp, Oleg Broytmann wrote: > >> On Fri, Jun 10, 2005 at 04:24:46PM +1000, Jamie Wilkinson wrote: >> >>> sqlite://foo >>> >>> points to the database file foo in the current directory, and >>> >> >> This points to a host "foo"... which is meaningles for sqlite... >> > > No it doesn't. It says the uri schema is sqlite and the rest is up > to you. > > file:// URIs don't have a host component. That's not true. Per the URI Generic Syntax spec [1] (including file URIs), '//' after the scheme denotes that a host name will follow. For example: file://host/path/to/file Valid non-host file URIs include: file:/path/to/file (no host specifier) file:///path/to/file (host specifier but "localhost" assumed) > I'm suggesting that sqlite:// URIs should work the same as file://, > and let you have both relative and absolute paths in them. I'd advise against using '//' for sqlite URIs because generic URI parsers will parse the file as the host (unless you want that behavior?). Using a single '/' or no '/' at all would let generic URI parsers handle sqlite URIs. [1] http://www.gbiv.com/protocols/uri/rfc/rfc3986.html Ryan Tomayko rto...@gm... http://naeblis.cx/rtomayko/ |
From: Ryan T. <rto...@gm...> - 2005-06-13 18:27:33
|
On Jun 13, 2005, at 2:23 PM, Ryan Tomayko wrote: > I'd advise against using '//' for sqlite URIs because generic URI > parsers will parse the file as the host. Using a single '/' or no > '/' at all is Actually, both should be accepted: 'sqlite:database/mydb' refers to a relative filename 'database/mydb' and 'sqlite:/some/path/to/mydb' refers to an absolute filename. Ryan |