Cảm ơn bạn đã dành thời gian đọc nội dung này. Nó sẽ là một bài viết dài để giải thích vấn đề. Tôi đã không thể tìm thấy câu trả lời trong tất cả các nguồn thông thường.MySQL và Python Chọn các vấn đề về Tuyên bố
Sự cố: Tôi đang gặp vấn đề với việc sử dụng câu lệnh chọn với python để thu hồi dữ liệu từ bảng trong cơ sở dữ liệu mysql.
hệ thống và các phiên bản:
Linux ubuntu 2.6.38-14-generiC#58-Ubuntu SMP Tue Mar 27 20:04:55 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Python: 2.7.1+
MySql: Server version: 5.1.62-0ubuntu0.11.04.1 (Ubuntu)
Dưới đây là bảng:
mysql> describe hashes;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | varchar(20) | NO | PRI | NULL | |
| hash | varbinary(4) | NO | MUL | NULL | |
+-------+--------------+------+-----+---------+-------+
Dưới đây là câu trả lời mà tôi muốn thông qua một truy vấn mysql bình thường:
mysql> SELECT id FROM hashes WHERE hash='f';
+------+
| id |
+------+
| 0x67 |
+------+
mysql> SELECT id FROM hashes WHERE hash='ff';
+--------+
| id |
+--------+
| 0x6700 |
+--------+
Như trước đây, đây là những các phản hồi được mong đợi và cách tôi thiết kế DB.
Mã của tôi:
import mysql.connector
from database import login_info
import sys
db = mysql.connector.Connect(**login_info)
cursor = db.cursor()
data = 'ff'
cursor.execute("""SELECT
* FROM hashes
WHERE hash=%s""",
(data))
rows = cursor.fetchall()
print rows
for row in rows:
print row[0]
này trả về kết quả tôi mong đợi:
[(u'0x67', 'f')]
0x67
Nếu tôi thay đổi dữ liệu: data = 'ff' tôi nhận được lỗi sau:
Traceback (most recent call last):
File "test.py", line 11, in <module>
(data))
File "/usr/local/lib/python2.7/dist-packages/mysql_connector_python-0.3.2_devel- py2.7.egg/mysql/connector/cursor.py", line 310, in execute
"Wrong number of arguments during string formatting")
mysql.connector.errors.ProgrammingError: Wrong number of arguments during string formatting
OK. Vì vậy, tôi thêm một chuỗi định dạng nhân vật để câu lệnh SQL của tôi như vậy:
cursor.execute("""SELECT
* FROM hashes
WHERE hash=%s%s""",
(data))
Và tôi nhận được câu trả lời sau đây:
[(u'0x665aa6', "f'f")]
0x665aa6
và nó nên bởi 0x6700.
Tôi biết rằng tôi phải chuyển dữ liệu với một ký tự% s. Đó là cách tôi xây dựng bảng cơ sở dữ liệu của mình, sử dụng một% s cho mỗi biến:
cursor.execute("""
INSERT INTO hashes (id, hash)
VALUES (%s, %s)""", (k, hash))
Bất kỳ ý tưởng nào để sửa lỗi này?
Cảm ơn.
Tuyệt vời! Điều này giải quyết được vấn đề của tôi. Cảm ơn! – JoshP