mozillalives wrote:
> Thanks for your quick response Michael.
>
> To answer your question, this is how I was issuing the queries
>
> conn.execute("PREPARE insert_statement(text) AS ...")
> conn.execute("EXECUTE insert_statement('%s')" % val)
>
> And I'm sorry if it seemed that I was attacking sqlalchemy, I just
> wasn't sure what it did and how it works with psycopg2. From what you
> wrote it seems that my question is more for the psycopg2 group than
> here.
>
> Thanks for helping me out.

Oh I wasn't upset with you, I was annoyed at the somewhat confused nature
of the comments in that blog post.   Prepared statements are fine but they
are not necessary in order to use bind parameters.   I think this
confusion arises based on people's experience with JDBC which does have
this requirement.


>
> Phil
>
> On Jan 15, 12:16 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
>> mozillalives wrote:
>> > Hello Everyone,
>>
>> > I am new to both sqlalchemy and elixir, but I have been using them for
>> > the past couple of weeks and I really like them. But I have a question
>> > about prepared statements for Postgresql.
>>
>> > For one specific application, I am doing a bunch of inserts
>> > (200,000+). From what I can tell, it looks like these are not prepared
>> > statements. I rewrote the code to issue prepared statements and this
>> > cuts the insertion time in half, but the code is crude. My question's
>> > are:
>>
>> how did you use prepared statements in Python if you don't know that
>> psycoopg2 uses prepared statements ?  was this in another language or
>> did
>> you implement a raw socket connection to your database ?
>>
>>
>>
>> > Is there a way to tell sqlalchemy or the engine (which would be
>> > psycopg2, correct?) to use prepared statements?
>>
>> to efficiently execute the same statement many times, use the
>> "executemany" style of execution - the tutorial describes this
>> athttp://www.sqlalchemy.org/docs/05/sqlexpression.html#executing-multip...
>> .   I don't think that psycopg2 actually uses "prepared" statements for
>> this purpose but I am not sure.  The DBAPI executemany() method is used.
>>
>>
>>
>> > I've noticed some opinions online indicating that psycopg2 does not
>> > have prepared statement support (e.g. -
>> >http://www.cerias.purdue.edu/site/blog/post/beware_sql_injections_due...)
>>
>> the comment at the bottom of that post ultimately references a psycopg2
>> message from 2007 so you'd need to ask the psycopg2 folks for updated
>> information.  However psycopg2 can do an "executemany" with great
>> efficiency as it is using methodologies for which you'd have to ask
>> them,
>> so if they don't use PG's actual "prepared" mechanism, its probably
>> unnecessary.  psycopg2 is an extremely mature and high performing
>> product.
>>
>> > - can I plug another engine into sqlalchemy that does?
>>
>> there's the pg8000 engine which may or may not do this.  But its written
>> in pure python, is not as fast as psycopg2, and is very new and not
>> widely
>> used since its author doesn't seem to promote it very much (but it is a
>> very well written library).
>>
>>
>>
>> > If I can't do any of the above and just need to prepare the statements
>> > manually, is there at least a method in sqlalchemy to properly quote
>> > my data before sending it to postgres?
>>
>> Despite some of the fud-like links mentioned on that blog, SQLAlchemy,
>> as
>> it says on the website since the day we launched 5 years ago, always
>> uses
>> bind parameters, in all cases, for all literal values, everywhere.  We
>> do
>> not and have never "quoted" anything within SQLA as that is left up to
>> the
>> services provided by the DBAPI.   DBAPI does not have "prepared
>> statement"
>> API.  It has "executemany()", for which the underlying implementation
>> may
>> or may not use prepared statements + server-level bind processing as an
>> implementation detail.  Psycopg2 handles the quoting in this case.
>> cx_oracle, OTOH, uses Oracle's native data binding facilities provided
>> by
>> OCI.  DBAPI abstracts this detail away.
>>
>>
>>
>>
>>
>> > Thanks,
>> > Phil
>> > --
>> > You received this message because you are subscribed to the Google
>> Groups
>> > "sqlalchemy" group.
>> > To post to this group, send email to sqlalch...@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > sqlalchemy+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> >http://groups.google.com/group/sqlalchemy?hl=en.
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.


Reply via email to