2011-07-24 44 views
7

私の問題はこれです、私は @x:=0 SELECT @X:[email protected]+1 from some_tableのようなMySQLユーザ定義変数を使用するクエリを持っており、このコードは1-1000からカラムを返します。Python MySQLdbでユーザー定義変数を設定できますか?

ただし、PythonでmySQLdbを通して送信した場合、このクエリは機能しません。

connection =MySQLdb.Connect(host='xxx',user='xxx',passwd='xxx',db = 'xxx') 
cursor = connection.cursor 
cursor.execute("""SET @X:=0;SELECT @X:[email protected]+1 FROM some_table""") 
rows = cursor.fetchall() 
print rows 

これは、空のタプルを印刷します。

どうすればこの問題を解決できますか?

おかげ

答えて

3

は、2つのクエリとしてそれを試してみてください。あなたはそれが1つのクエリ、MySQLのユーザー変数のドキュメントへのコメントの例になりたい場合は

は、次のようになります。

SELECT @rownum:[email protected]+1 rownum, t.* FROM (SELECT @rownum:=1) r, mytable t; 

または

SELECT if(@a, @a:[email protected]+1, @a:=1) as rownum 

+0

こんにちは、それは今働く。しかし、私の実際のクエリは、このダミーの例よりもちょっと複雑です。 mysqlでは2秒のようにかなり速く実行されますが、このクエリをPythonで送信した場合、分よりもずっと遅くなります。あなたはこの問題について洞察していますか?ありがとう – zsljulius

5

は、一度に1つのクエリを実行してください:

cursor.execute("SET @X:=0;"); 
cursor.execute("SELECT @X:[email protected]+1 FROM some_table"); 
+0

http://dev.mysql.com/doc/refman/5.1/en/user-variables.htmlを参照してくださいありがとう、それは今素晴らしいです! – zsljulius

+0

@zsljuliusようこそ。私の答えをupvoteにhetistateしないでください:) – spacediver

+0

これは私のためにも完璧に働いた:D @zsljulius私はあなたを助けてくれましたいくつかの余分な情報を追加するあなたの答えを編集しました:) – rgenito

関連する問題