2012-04-18 21 views
6

Trước tiên tôi nên đề cập rằng tôi đang sử dụng SqlAlchemy thông qua Flask-SqlAlchemy. Tôi không tin điều này ảnh hưởng đến vấn đề này nhưng nếu có, vui lòng cho tôi biết.SqlAlchemy sẽ không chấp nhận giá trị datetime.datetime.now trong cột DateTime

Dưới đây là phần có liên quan của thông báo lỗi tôi nhận được khi chạy chức năng create_all trong SQLAlchemy

InterfaceError: (InterfaceError) Error binding parameter 4 - probably unsupported type. u'INSERT INTO podcasts (feed_url, title, url, last_updated, feed_data) VALUES (?, ?, ?, ?, ?)' (u'http://example.com/feed', u'Podcast Show Title', u'http://example.com', '2012-04-17 20:28:49.117000'

Đây là mô hình của tôi:

class Podcast(db.Model): 
    import datetime 
    __tablename__ = 'podcasts' 
    id = db.Column(db.Integer, primary_key=True) 
    feed_url = db.Column(db.String(150), unique=True) 
    title = db.Column(db.String(200)) 
    url = db.Column(db.String(150)) 
    last_updated = db.Column(db.DateTime, default=datetime.datetime.now) 
    feed_data = db.Column(db.Text) 

    def __init__(self, feed_url): 
     import feedparser 

     self.feed_url = feed_url 
     self.feed_data = feedparser.parse(self.feed_url) 
     self.title = self.feed_data['feed']['title'] 
     self.url = self.feed_data['feed']['link'] 

Ai đó có thể cho tôi biết thế nào Tôi có thể làm việc này? Tôi cũng đã thử các mô hình sau đây nhưng điều đó cũng không hoạt động. Lỗi tương tự.

class Podcast(db.Model): 
    import datetime 
    __tablename__ = 'podcasts' 
    id = db.Column(db.Integer, primary_key=True) 
    feed_url = db.Column(db.String(150), unique=True) 
    title = db.Column(db.String(200)) 
    url = db.Column(db.String(150)) 
    last_updated = db.Column(db.DateTime) 
    feed_data = db.Column(db.Text) 

    def __init__(self, feed_url): 
     import feedparser 

     self.feed_url = feed_url 
     self.feed_data = feedparser.parse(self.feed_url) 
     self.last_updated = datetime.datetime.now() 
     self.title = self.feed_data['feed']['title'] 
     self.url = self.feed_data['feed']['link'] 
+3

Bạn có chắc chắn rằng 'cái cột last_updated' là vấn đề? Có thể đó là cột 'feed_data' (cột 4 nếu bạn bắt đầu đếm từ số không)? Sau khi tất cả, bạn đang cố gắng để đặt một từ điển (kết quả của 'feedparser.parse (...)' vào một cột của kiểu văn bản – srgerg

+0

cũng điều này đã không có gì để làm với câu hỏi, bạn có thể vui lòng cho tôi biết , bắt đầu từ đâu nếu tôi muốn bố trí ORM đơn giản – user993563

+0

Tôi nghĩ bạn nên sử dụng sqlalchemy.func.now() thay vì datetime.datetime.now() – utapyngo

Trả lời

-8

Nhìn vào dòng của bạn:

last_updated = db.Column(db.DateTime, default=datetime.datetime.now) 

Không có datetime.datetime.now thuộc tính trong python. Tuy nhiên, có a datetime.datetime.now()chức năng trong python. Bạn chỉ thiếu một cặp dấu ngoặc đơn.

+6

Không, sqlalchemy yêu cầu có thể gọi được. Nếu bạn thêm dấu ngoặc đơn –

+2

@adamek 'something.myfunc' trả về chính hàm, không gọi nó, đây là hành vi mong muốn.Nếu bạn gọi hàm này, bạn sẽ chỉ truy xuất một lần duy nhất và sử dụng nó làm mặc định, đó là hành vi khác và không mong muốn. –

13

Hãy thử sử dụng datetime.datetime.utcnow(). Điều này làm việc cho tôi.

5
last_updated = db.Column(db.DateTime, default=db.func.current_timestamp()) 

Tôi nghĩ rằng điều này sẽ làm việc

0

Đặt nhập khẩu ra khỏi lớp.

from datetime import datetime 

last_updated = db.Column(db.DateTime, default=datetime.now()) 

hoặc

import datetime 

last_updated = db.Column(db.DateTime, default=datetime.datetime.now()) 

tôi đã này

Các vấn đề liên quan