Я пытаюсь добавить сообщение в таблицу сообщений и позволить пользователю иметь возможность редактировать сообщение. в то время как другие пользователи могут просматривать сообщения и нравится - PullRequest
0 голосов
/ 29 октября 2019

Я не знаю, как добавить сообщение в таблицу сообщений и позволить пользователю иметь возможность редактировать сообщение. в то время как другие пользователи могут просматривать сообщения и им нравится

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.

Я не знаю, как добавить сообщение в таблицу сообщенийи позволить пользователю иметь возможность редактировать сообщение. в то время как другие пользователи могут просматривать сообщения и им нравится.

1 Ответ

1 голос
/ 29 октября 2019

Вы передаете переменную post в оператор SQL INSERT, в то время как post имеет функцию типа в вашем коде. Вы должны передать yourpost строку вместо post, чтобы ваш код работал.

...