(builtins.TypeError)SQLite日期类型仅接受Python日期对象作为输入

(builtins.TypeError)SQLite日期类型仅接受Python日期对象作为输入,python,json,sqlalchemy,try-catch,Python,Json,Sqlalchemy,Try Catch,我尝试了许多在SQLAlchemy对象中插入日期的方法。但这是错误的 我的路线文件: app.route('/signup', methods=['POST']) def signup(): reply = {} try: data = request.get_json() password_hash = generate_password_hash(data['password']) datelist = data['birthd

我尝试了许多在SQLAlchemy对象中插入日期的方法。但这是错误的

我的路线文件:

app.route('/signup', methods=['POST'])
def signup():
    reply = {}
    try:
        data = request.get_json()
        password_hash = generate_password_hash(data['password'])
        datelist = data['birthdate'].split('-')
        bdate = datetime.date(int(datelist[0]), int(datelist[1]), int(datelist[2]))
        new_user = Entities.User(id = uuid.uuid4(), username = data['username'], fullname = data['fullname'], email = data['email'], password_hash = password_hash, birthdate = bdate)
        db.session.add(new_user)
        db.session.commit()
        reply['status'] = "OK"
        reply['message'] = ""
    except Exception as e:
        reply['status'] = "FAIL"
        reply['message'] = str(e)
    return jsonify(reply)
我的SQLAlchemy用户类:

class User(db.Model):
    id = db.Column(db.String(40), unique=True, primary_key=True)
    username = db.Column(db.String(25), index=True, unique=True)
    fullname = db.Column(db.String(25), index=True)
    email = db.Column(db.String(25), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    imagelink = db.Column(db.String(300), default = "some.url.unspecified.com")
    bio = db.Column(db.String(700), default = "No Bio Added")
    datejoined = db.Column(db.Date, default = date.today().strftime("%Y-%m-%d"))
    birthdate = db.Column(db.String(10))
我的查询的JSON正文: 我正在向本地主机发送此消息<代码>http://127.0.0.1:5001/signup

{
    "username":"amandesai01",
    "fullname":"Aman Desai",
    "password":"xyz123",
    "email":"amandesai01@gmail.com",
    "birthdate":"2000-10-14"
}
我得到的答复是:

{
  "message": "(builtins.TypeError) SQLite Date type only accepts Python date objects as input.\n[SQL: INSERT INTO user (id, username, fullname, email, password_hash, imagelink, bio, datejoined, birthdate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)]\n[parameters: [{'password_hash': 'pbkdf2:sha256:150000$CPZYKMPJ$b4e0f3a01e17e533a92cd21709b1e4f496f068bd19c8b31fa2723cbbf1ea6beb', 'id': UUID('0e8f6414-27af-4ca9-8e72-a0f4974a0b0d'), 'fullname': 'Aman Desai', 'birthdate': datetime.date(2000, 10, 14), 'email': 'amandesai01@gmail.com', 'username': 'amandesai01'}]]",
  "status": "FAIL"
}

错误说明了问题所在。试试这个

  • 首先,您需要导入
    datetime
  • 现在,将此更改应用于您的
    “生日”
  • 要获取当前日期(今天日期),请使用以下命令

  • 我不明白他们到底需要哪一个日期对象。我尝试了datetime.date,但没有成功:(
    datejoined=db.Column(db.date,default=date.today().strftime(%Y-%m-%d))
    有一个有趣的默认值。除非每天重新启动应用程序,
    default=datetime.date.today()
    对于默认值来说是一个错误的选择。默认值应该是
    日期。今天
    本身起作用。从问题和回答来看,很明显,他们在将出生日期作为一个值传递之前已经在转换出生日期,而问题可能是字符串默认值
    datejoined
    datetime.date(2000-10-14)是有效的Python,但引发了一个异常,因为传递1个整数参数
    1976
    不是调用
    date()
    的方法。在编辑答案时,我犯了一些错误。我编辑了it@Kalana你还没有解决Ilja提出的问题。
    from datetime import datetime, date
    
    {
        "username":"amandesai01",
        "fullname":"Aman Desai",
        "password":"xyz123",
        "email":"amandesai01@gmail.com",
        "birthdate": datetime.date(2000-10-14)
    }
    
    datejoined = db.Column(db.Date, default = date.today())