Thread: Getting adaped output from unicode text, without a connection
Hello, I need to write some static .sql files (just as an explanation, it is startup code for Django). Some of the strings arenon-ascii. I'm stumped about how to get utf-8 instead of latin-1 in the file. I'm generating the .sql as strings, without a connection. I found a prior message on this list that suggested what to do(1) and came up with this routine. def todb(s): psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) psycopg2.extensions.register_type(psycopg2.extensions.DECIMAL) psycopg2.extensions.register_type(psycopg2.extensions.FLOAT) adapted = psycopg2.extensions.adapt(s) return adapted.getquoted() But it encodes in latin-1. I understand from the docs that I need to get a connection and set the .encoding attribute, butI can't see how to get a connection instance without a db handy. For instance, >>> conn = psycopg2.connect(database = None) fails. I expect that I am asking a dopey question (I'm not very sure what I am doing) but I'd appreciate a pointer even if it makesme feel dumb. Thanks, Jim (1) http://www.postgresql.org/message-id/AANLkTik+tq8hbnCj3ROmOLNV1DSw48o4sDoSvnxTN3R8@mail.gmail.com
On Sun, Jul 21, 2013 at 7:56 PM, Hefferon, James S. <jhefferon@smcvt.edu> wrote: > Hello, > > I need to write some static .sql files (just as an explanation, it is startup code for Django). Some of the strings arenon-ascii. I'm stumped about how to get utf-8 instead of latin-1 in the file. > > I'm generating the .sql as strings, without a connection. I found a prior message on this list that suggested what todo (1) and came up with this routine. > > def todb(s): > psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) > psycopg2.extensions.register_type(psycopg2.extensions.DECIMAL) > psycopg2.extensions.register_type(psycopg2.extensions.FLOAT) > adapted = psycopg2.extensions.adapt(s) > return adapted.getquoted() > > But it encodes in latin-1. I understand from the docs that I need to get a connection and set the .encoding attribute,but I can't see how to get a connection instance without a db handy. For instance, > >>>> conn = psycopg2.connect(database = None) > > fails. > > I expect that I am asking a dopey question (I'm not very sure what I am doing) but I'd appreciate a pointer even if itmakes me feel dumb. No, it's not a dumb question. But I'm afraid you cannot create a psycopg connection object without a real database connection. If you had a working connection you could adapt the string with: conn.set_client_encoding('utf8') adapted = psycopg2.extensions.adapt(s) adapted.prepare(conn) return adapted.getquoted() you don't need the register_type calls above: they only control how data from the database is converted to Python. -- Daniele
On 07/21/2013 11:56 AM, Hefferon, James S. wrote: > Hello, > > I need to write some static .sql files (just as an explanation, it is startup code for Django). Some of the strings arenon-ascii. I'm stumped about how to get utf-8 instead of latin-1 in the file. > > I'm generating the .sql as strings, without a connection. I found a prior message on this list that suggested what todo (1) and came up with this routine. > > > I expect that I am asking a dopey question (I'm not very sure what I am doing) but I'd appreciate a pointer even if itmakes me feel dumb. My question would be, why invoke psycopg2 at all? Can you not just write out the strings? > > Thanks, > Jim > > (1) http://www.postgresql.org/message-id/AANLkTik+tq8hbnCj3ROmOLNV1DSw48o4sDoSvnxTN3R8@mail.gmail.com > -- Adrian Klaver adrian.klaver@gmail.com
On Jul 21, 2013, at 1:39 PM, Adrian Klaver wrote: > My question would be, why invoke psycopg2 at all? > Can you not just write out the strings? I assume the OP wanted to do pre-quoting on the strings. -- -- Christophe Pettus xof@thebuild.com
> I assume the OP wanted to do pre-quoting on the strings. Exactly so, thank you. I didn't know the term. Jim -------------------------------------- `Does not the Captain seek your advice, sir?' `Not always,' said Stephen.