首页 > 解决方案 > 我正在尝试将帖子添加到帖子表并允许用户能够编辑帖子。而其他用户可以查看帖子并喜欢它

问题描述

我不知道如何将帖子添加到帖子表并允许用户编辑帖子。而其他用户可以查看帖子并喜欢它

import sqlite3, datetime

conn = sqlite3.connect("test.db")

conn.execute('''CREATE TABLE IF NOT EXISTS Users
  (username PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT NOT NULL,
  time DATETIME NOT NULL,
  password INT NOT NULL); ''')

conn.execute('''CREATE TABLE IF NOT EXISTS Posts
  (username PRIMARY KEY ,
  post TEXT NOT NULL,
  time DATETIME NOT NULL); ''')

now = datetime.datetime.now()
current = now.strftime("%d-%m-%Y %H:%M:%S")
print(current)

def signUp():
    while True:
        username = input("Enter a username: ")
        if 0 < len(username) < 16:
            check = conn.execute("SELECT name FROM Users WHERE username = ?",(username,)).fetchone()
            if check == None:
                break
            else:
                print('username taken')
    while True:
        name = input("Enter your full name: ")
        if 0 < len(name) < 16 and ' ' in name:
            break                   
    while True:
        email = input("enter your email: ")
        if '@' in email:
            break
    while True:
        password = input("Enter your password as long as its less than 8 characters: ")
        if len(password) < 8:
          break 
    conn.execute("INSERT INTO Users(username,name,email,time,password) VALUES(?,?,?,?,?)" , (username, name, email, current, password))
    conn.commit()

    print("your details have been saved\n")

    details = conn.execute('SELECT * FROM Users WHERE username = ?', (username,)).fetchall() 
    print('your info:', details)
    return username

def signIn():
    while True:
        usernameInput = input("Enter your username: ")
        check = conn.execute("SELECT name FROM Users WHERE username = ?",(usernameInput,)).fetchone()
        if check != None:
            break
        else:
            print('no user found by that name')
    while True:
        passwordInput = input('enter your password: ')
        check = conn.execute("SELECT name FROM Users WHERE password = ? AND username = ?",(passwordInput, usernameInput)).fetchone()
        if check != None:
            break
        else:
            print('incorrect password')

    details = conn.execute("SELECT * FROM Users WHERE username = ?",(usernameInput,)).fetchone()
    print('your info:', details)
    return usernameInput

def menuOption():
    print("Do you want to:\n1)Sign up\n2)Sign in")
    while True:
        userResponse = input(">>> ")
        if userResponse == '1' or userResponse == '2':
            break
        else:
            print('you must choose 1 or 2')
    if(userResponse == "1"):
        usr = signUp()
    elif(userResponse == "2"):
        usr = signIn()
    wpost(usr)

def get_all():
    print('\nall user info:\n')
    allusers = conn.execute('SELECT * FROM Users').fetchall()
    for i in allusers:
        print(i)

def post(username):
  while True:
      yourpost = input("This is your post, type whatever you want: ")
      if len(yourpost) < 300:
         conn.execute("INSERT INTO Posts(username,post,time) VALUES(?,?,?)" , (username, post, current))
         conn.commit()
         allposts = conn.execute('SELECT * FROM Posts').fetchall()
         for x in allposts:
           print(x)
           break
      elif len(yourpost) > 300:
        print('your post is longer than 300 characters')
        break






def wpost(username):
    print("Do you want to: \n(Y)create a post\n(N)not")
    while True:
      userResponse2 = input(">>> ")
      if userResponse2 == "Y" or userResponse2 == 'N':
        break
      else:
          print("you must choose Y OR N")
    if(userResponse2 == "Y"):
        post(username)
    if(userResponse2 == "N"):
        get_all()




menuOption()
conn.close()

这是我目前得到的错误:

Traceback (most recent call last):
  File "main.py", line 126, in <module>
    menuOption()
  File "main.py", line 83, in menuOption
    wpost(usr)
  File "main.py", line 119, in wpost
    post(username)
  File "main.py", line 95, in post
    conn.execute("INSERT INTO Posts(username,post,time) VALUES(?,?,?)" , (username, post, current))
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.

我不知道如何将帖子添加到帖子表并允许用户编辑帖子。而其他用户可以查看帖子并喜欢它。

标签: pythonsqlauthenticationpostrepl.it

解决方案


您将post变量传递给 SQL INSERT 语句,而post代码中有类型函数。你应该传递yourpost字符串而不是post让你的代码工作。


推荐阅读