Tôi đang cố gắng tìm hiểu cách sử dụng peewee với mysql.Tại sao peewee bao gồm cột 'id' vào truy vấn chọn mysql?
Tôi có cơ sở dữ liệu hiện có trên máy chủ mysql với bảng hiện có. Bảng hiện đang trống (Tôi chỉ đang thử nghiệm ngay bây giờ).
>>> db = MySQLDatabase('nhl', user='root', passwd='blahblah')
>>> db.connect()
>>> class schedule(Model):
... date = DateField()
... team = CharField()
... class Meta:
... database = db
>>> test = schedule.select()
>>> test
<class '__main__.schedule'> SELECT t1.`id`, t1.`date`, t1.`team` FROM `nhl` AS t1 []
>>> test.get()
tôi nhận được lỗi sau:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/peewee.py", line 1408, in get
return clone.execute().next()
File "/usr/lib/python2.6/site-packages/peewee.py", line 1437, in execute
self._qr = QueryResultWrapper(self.model_class, self._execute(), query_meta)
File "/usr/lib/python2.6/site-packages/peewee.py", line 1232, in _execute
return self.database.execute_sql(sql, params, self.require_commit)
File "/usr/lib/python2.6/site-packages/peewee.py", line 1602, in execute_sql
res = cursor.execute(sql, params or())
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 201, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 't1.id' in 'field list'")
Tại sao Peewee thêm cột 'id' vào truy vấn chọn? Tôi không có một cột id trong bảng đã tồn tại trong cơ sở dữ liệu. Tôi chỉ đơn giản muốn làm việc với bảng hiện có và không phụ thuộc vào peewee phải tạo ra mỗi khi tôi muốn tương tác với cơ sở dữ liệu. Đây là nơi tôi tin rằng lỗi là.
Kết quả của truy vấn phải trống vì bảng trống nhưng vì tôi đang học tôi chỉ muốn thử mã. Tôi đánh giá cao sự giúp đỡ của bạn.
EDIT
Dựa trên những phản hồi hữu ích bởi Wooble và Francis tôi đến tự hỏi liệu nó thậm chí còn có ý nghĩa đối với tôi để sử dụng Peewee này hay cách khác ORM như SQLAlchemy. Những lợi ích của việc sử dụng một ORM thay vì chỉ chạy các truy vấn trực tiếp trong python bằng cách sử dụng MySQLdb là gì?
Đây là những gì tôi mong đợi để được thực hiện:
-Tự động tải dữ liệu từ các máy chủ web khác nhau. Hầu hết dữ liệu ở định dạng xls hoặc csv. Tôi có thể chuyển đổi xls thành csv bằng cách sử dụng gói xlrd.
-ghi/xử lý dữ liệu trong đối tượng danh sách trước khi chèn/chèn số lượng lớn vào bảng db mysql.
truy vấn phức tạp để xuất dữ liệu từ mysql vào python thành dữ liệu thích hợp được cấu trúc (danh sách ví dụ) để tính toán thống kê dễ dàng hơn trong python thay vì mysql. Bất cứ điều gì có thể được thực hiện trong mysql sẽ được thực hiện ở đó nhưng tôi có thể chạy regressions phức tạp trong python.
chạy nhiều gói đồ họa khác nhau trên dữ liệu được truy xuất từ truy vấn. Một số điều này có thể bao gồm việc sử dụng gói ggplot2 (từ R-project), đây là một gói đồ họa tiên tiến. Vì vậy, tôi sẽ liên quan đến một số tích hợp R/Python.
Đưa ra điều trên - tốt nhất là tôi bỏ ra hàng giờ để tìm hiểu ORM/Peewee/SQLAlchemy hoặc dính vào truy vấn mysql trực tiếp bằng MySQLdb?
Cảm ơn bạn đã trả lời chi tiết. Khi nó quay ra bảng hiện có trong cơ sở dữ liệu không có một khóa CHÍNH (ngày). Tôi có cần sử dụng pwiz như Wooble chỉ định để cung cấp thông tin này cho người nhận hàng không? Đánh giá cao sự trợ giúp. – codingknob
Bạn không * cần * to - pwiz chỉ là một trình tạo mã và không làm gì bạn không thể tự làm.Có thể chỉ bao gồm đối số 'primary_key = True' như được giải thích [trong tài liệu mô tả khóa chính không phải số nguyên] (http://peewee.readthedocs.org/en/latest/peewee/models.html#non-integer-primary-keys). –
Tôi đang điều tra SQLAlchemy vì peewee sẽ không làm những gì tôi muốn trong tương lai. – codingknob