Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > MySql

Reply
Thread Tools

MySql

 
 
miker2@optusnet.com.au
Guest
Posts: n/a
 
      07-27-2006
HI,

I'm having trouble writing to a MySql db using python and the MySQLdb
module. Here is the code:

import MySQLdb
base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
db="test_py")
cursor = base.cursor()
cursor.execute("INSERT INTO table (field) VALUES (int)")

this does not work but the interesting thing is, there is an
AUTO_INCREMENT
field. Now say i had a couple of entries in there already:
auto table
1 | 90
2 | 32

and then i run my py script 3 times, the data is not entered but if i
add
another entry from mysql the auto increment field will have counted the

python entries:
auto table
1 | 90
2 | 32
6 | 47

please tell me what i am doing wrong. thanks.

 
Reply With Quote
 
 
 
 
Marc 'BlackJack' Rintsch
Guest
Posts: n/a
 
      07-27-2006
In <(E-Mail Removed) om>, miker2 wrote:

> import MySQLdb
> base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> db="test_py")
> cursor = base.cursor()
> cursor.execute("INSERT INTO table (field) VALUES (int)")
>
> this does not work but the interesting thing is, there is an
> AUTO_INCREMENT
> field. Now say i had a couple of entries in there already:
> auto table
> 1 | 90
> 2 | 32
>
> and then i run my py script 3 times, the data is not entered but if i
> add
> another entry from mysql the auto increment field will have counted the
>
> python entries:
> auto table
> 1 | 90
> 2 | 32
> 6 | 47
>
> please tell me what i am doing wrong. thanks.


Where's the problem? Do you mind that the third entry has a 6 as unique
`auto` value? Doesn't `AUTO_INCREMENT` just guarantee unique values?

Ciao,
Marc 'BlackJack' Rintsch
 
Reply With Quote
 
 
 
 
miker2@optusnet.com.au
Guest
Posts: n/a
 
      07-27-2006

Marc 'BlackJack' Rintsch wrote:
> In <(E-Mail Removed) om>, miker2 wrote:
>
> > import MySQLdb
> > base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> > db="test_py")
> > cursor = base.cursor()
> > cursor.execute("INSERT INTO table (field) VALUES (int)")
> >
> > this does not work but the interesting thing is, there is an
> > AUTO_INCREMENT
> > field. Now say i had a couple of entries in there already:
> > auto table
> > 1 | 90
> > 2 | 32
> >
> > and then i run my py script 3 times, the data is not entered but if i
> > add
> > another entry from mysql the auto increment field will have counted the
> >
> > python entries:
> > auto table
> > 1 | 90
> > 2 | 32
> > 6 | 47
> >
> > please tell me what i am doing wrong. thanks.

>
> Where's the problem? Do you mind that the third entry has a 6 as unique
> `auto` value? Doesn't `AUTO_INCREMENT` just guarantee unique values?
>
> Ciao,
> Marc 'BlackJack' Rintsch


the problem is that the entry from python: cursor.execute("INSERT INTO
table (field) VALUES (3)") is not there.

the auto increment counts the entries 1,2,3,4,5, ect. the 3,4,5 in
the example above is where i've run the py script and as you can see
there are not there. the 6 is an entry from mysql.

so basically the data from python is not being entered but the auto
increment is being counted. thanks.

sorry about the dodgie description.

 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      07-27-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> HI,
>
> I'm having trouble writing to a MySql db using python and the MySQLdb
> module. Here is the code:
>
> import MySQLdb
> base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> db="test_py")
> cursor = base.cursor()
> cursor.execute("INSERT INTO table (field) VALUES (int)")


I've never used MySQL but they're all much the same --
"table" is a reserved word. What is "int" supposed to be? That's not
valid SQL AFAIK. Is that exactly what you typed? Or are you coyly
obfuscating?

Try this:
cursor.execute("INSERT INTO tablename (fieldname) VALUES (42)")
or better,
somevar = 42
cursor.execute("INSERT INTO tablename (fieldname) VALUES (?)",
(somevar,))
even better, read the docs and look at the examples


>
> this does not work


.... and the error message was ... what? If it's not a state secret, how
about divulging it?


> but the interesting thing is, there is an
> AUTO_INCREMENT
> field. Now say i had a couple of entries in there already:
> auto table
> 1 | 90
> 2 | 32
>
> and then i run my py script 3 times, the data is not entered but if i
> add
> another entry from mysql the auto increment field will have counted the
>
> python entries:
> auto table
> 1 | 90
> 2 | 32
> 6 | 47


Evidently it's committed the auto increment before it decides that it
doesn't like your SQL or whatever. Read the warranty card that came
with the autoincrementer gizmoid; you won't find "continuous" or "no
gaps" mentioned anywhere.

> please tell me what i am doing wrong.


Inter alia, not giving enough clear unambiguous info about what your
problem really is.

Cheers,
John

 
Reply With Quote
 
miker2@optusnet.com.au
Guest
Posts: n/a
 
      07-27-2006

John Machin wrote:
> (E-Mail Removed) wrote:
> > HI,
> >
> > I'm having trouble writing to a MySql db using python and the MySQLdb
> > module. Here is the code:
> >
> > import MySQLdb
> > base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> > db="test_py")
> > cursor = base.cursor()
> > cursor.execute("INSERT INTO table (field) VALUES (int)")

>
> I've never used MySQL but they're all much the same --
> "table" is a reserved word. What is "int" supposed to be? That's not
> valid SQL AFAIK. Is that exactly what you typed? Or are you coyly
> obfuscating?
>
> Try this:
> cursor.execute("INSERT INTO tablename (fieldname) VALUES (42)")
> or better,
> somevar = 42
> cursor.execute("INSERT INTO tablename (fieldname) VALUES (?)",
> (somevar,))
> even better, read the docs and look at the examples
>
>
> >
> > this does not work

>
> ... and the error message was ... what? If it's not a state secret, how
> about divulging it?
>
>
> > but the interesting thing is, there is an
> > AUTO_INCREMENT
> > field. Now say i had a couple of entries in there already:
> > auto table
> > 1 | 90
> > 2 | 32
> >
> > and then i run my py script 3 times, the data is not entered but if i
> > add
> > another entry from mysql the auto increment field will have counted the
> >
> > python entries:
> > auto table
> > 1 | 90
> > 2 | 32
> > 6 | 47

>
> Evidently it's committed the auto increment before it decides that it
> doesn't like your SQL or whatever. Read the warranty card that came
> with the autoincrementer gizmoid; you won't find "continuous" or "no
> gaps" mentioned anywhere.
>
> > please tell me what i am doing wrong.

>
> Inter alia, not giving enough clear unambiguous info about what your
> problem really is.
>
> Cheers,
> John



sorry guys...

forget about the auto incrementer for a second.

the entry is not being recorded. that is my problem. the script does
not work. thanks.

 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      07-27-2006
(E-Mail Removed) wrote:
> John Machin wrote:
> > (E-Mail Removed) wrote:
> > > HI,
> > >
> > > I'm having trouble writing to a MySql db using python and the MySQLdb
> > > module. Here is the code:
> > >
> > > import MySQLdb
> > > base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> > > db="test_py")
> > > cursor = base.cursor()
> > > cursor.execute("INSERT INTO table (field) VALUES (int)")

> >
> > I've never used MySQL but they're all much the same --
> > "table" is a reserved word. What is "int" supposed to be? That's not
> > valid SQL AFAIK. Is that exactly what you typed? Or are you coyly
> > obfuscating?
> >
> > Try this:
> > cursor.execute("INSERT INTO tablename (fieldname) VALUES (42)")
> > or better,
> > somevar = 42
> > cursor.execute("INSERT INTO tablename (fieldname) VALUES (?)",
> > (somevar,))
> > even better, read the docs and look at the examples
> >
> >
> > >
> > > this does not work

> >
> > ... and the error message was ... what? If it's not a state secret, how
> > about divulging it?
> >
> >
> > > but the interesting thing is, there is an
> > > AUTO_INCREMENT
> > > field. Now say i had a couple of entries in there already:
> > > auto table
> > > 1 | 90
> > > 2 | 32
> > >
> > > and then i run my py script 3 times, the data is not entered but if i
> > > add
> > > another entry from mysql the auto increment field will have counted the
> > >
> > > python entries:
> > > auto table
> > > 1 | 90
> > > 2 | 32
> > > 6 | 47

> >
> > Evidently it's committed the auto increment before it decides that it
> > doesn't like your SQL or whatever. Read the warranty card that came
> > with the autoincrementer gizmoid; you won't find "continuous" or "no
> > gaps" mentioned anywhere.
> >
> > > please tell me what i am doing wrong.

> >
> > Inter alia, not giving enough clear unambiguous info about what your
> > problem really is.
> >
> > Cheers,
> > John

>
>
> sorry guys...
>
> forget about the auto incrementer for a second.
>
> the entry is not being recorded. that is my problem. the script does
> not work. thanks.


OK we've forgotten about the auto incrementer.

Now tell us what "does not work" means.
Show us an actual suitably-cut down script that "does not work".
If you get an error message, tell us what the error message was.
If you didn't get an error message, bloody well tell us that you
didn't.

BTW, if the script doesn't contain

base.commit()

somewhere, take yourself out to the back lane and give yourself a good
thumping
Then come back in and read the docs about transactions and commit and
autocommit etc.

HTH,
John

 
Reply With Quote
 
Atanas Banov
Guest
Posts: n/a
 
      07-27-2006

(E-Mail Removed) wrote:

> sorry guys...
>
> forget about the auto incrementer for a second.
>
> the entry is not being recorded. that is my problem. the script does
> not work. thanks.


after Dijkstra: "the use of mySql cripples the mind; its teaching
should, therefore, be regarded as a criminal offence. "

thus said, which mysql engine are you using for your DB? is it
transactional, should you commit?

 
Reply With Quote
 
Dennis Lee Bieber
Guest
Posts: n/a
 
      07-27-2006
On 26 Jul 2006 23:39:45 -0700, (E-Mail Removed) declaimed the
following in comp.lang.python:

>
> please tell me what i am doing wrong. thanks.


Uhm... Did you COMMIT the inserts? auto-increment has to operate
when the insert statement is run, but without the commit, those inserted
records are rolled-out; but the increments can not be rolled out as some
other client may have inserted between your insert and potential commit.

--
Wulfraed Dennis Lee Bieber KD6MOG
(E-Mail Removed) (E-Mail Removed)
HTTP://wlfraed.home.netcom.com/
(Bestiaria Support Staff: (E-Mail Removed))
HTTP://www.bestiaria.com/
 
Reply With Quote
 
Sibylle Koczian
Guest
Posts: n/a
 
      07-27-2006
John Machin schrieb:
>
> BTW, if the script doesn't contain
>
> base.commit()
>
> somewhere, take yourself out to the back lane and give yourself a good
> thumping


That's not really fair, because transactions were added to MySQL only a
short time ago (at least to the default table type). There simply hasn't
yet been time for every experienced MySQL user to get hit by the need to
commit things.

--
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg
e-mail : http://www.velocityreviews.com/forums/(E-Mail Removed)-Augsburg.DE
 
Reply With Quote
 
ftc
Guest
Posts: n/a
 
      07-27-2006
(E-Mail Removed) a écrit :
> import MySQLdb
> base = MySQLdb.connect(host="localhost", user="blah", passwd="blah",
> db="test_py")
> cursor = base.cursor()
> cursor.execute("INSERT INTO table (field) VALUES (int)")
>
> this does not work but the interesting thing is, there is an
> AUTO_INCREMENT
> field. Now say i had a couple of entries in there already:
> auto table
> 1 | 90
> 2 | 32
>
> and then i run my py script 3 times, the data is not entered but if i
> add
> another entry from mysql the auto increment field will have counted the
>
> python entries:
> auto table
> 1 | 90
> 2 | 32
> 6 | 47
>
> please tell me what i am doing wrong. thanks.



The dbapi2 specification says:
"if the database supports an auto-commit feature, this must be initially
off"

So you have to do a commit ( base.commit() ) or to enable auto-commit at
the beginning ( base.autocommit( True ) )
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How to insert PDF file in to MySql and read it from MySql toJAVA App Jeffrey H. Coffield Java 1 07-24-2009 12:29 AM
MySQL-python-1.2.2 install with no mysql washakie Python 4 01-15-2008 08:15 PM
"mysql.h: No such file or directory" when building MySQL-python francescomoi@europe.com Python 2 05-11-2005 03:12 PM
DBD:mysql doesn't read mysql option file /etc/my.cnf file JL Perl 0 01-28-2005 03:19 AM
"Pure Python" MySQL module like Net::MySQL Ravi Python 6 07-21-2003 06:53 PM



Advertisments