如何对 Sequel 数据库使用 "select * FROM" 方法?

How to use the "select * FROM" method for Sequel databases?

我一直在研究与数据库交互和在数据库上存储信息。目前,我正在为我的编程开发一个项目 class,我正在尝试创建一个注册页面。此时在我的 signup.html 文件中,表单接受两个输入:用户名和密码。然后一旦提交,它就会转到我的 app.rb 文件中的 post 方法根目录。现在,在那个 app.rb 文件中,在 /sources 根(这是我的 signup.html 文件中表单的 post 方法根)我有它所以输入的凭据是保存在我的数据库中。现在 我想这样做,以便数据库进行交叉检查以确保没有人与刚刚输入的用户名相同。换句话说,如果用户名已被占用,则无法注册。如果用户名被占用,我希望出现一条消息,说明用户需要输入一个新的所需用户名。如果未使用用户名,我希望它重定向到我创建的 home.html 文件。我做了研究,发现这样做的方法是使用 SELECT column_name FROM table_name。但是我不知道把这段代码放在哪里。它是否在我的 app.rb 文件中的 /sources 根目录下?

非常感谢任何帮助。这是我的代码:

在我的 signup.html 文件中:

<p>Please fill out the information below to sign up.</p>

<form action = "/sources" method="post">
    Username: <input type="text" name ="username" placeholder="Username"></br>
    Password: <input type="password" name ="password" placeholder="Password"></br>
    <input type="submit" value="Submit">
</form>

在我的 app.rb 文件中:

require 'sinatra'
require 'sequel'
require 'rubygems'
require 'simple-rss'
require 'open-uri'

DB = Sequel.connect('sqlite://test.db')

get '/chart' do
  DB.create_table(:db) do
    primary_key :id
    String :username
    String :password
  end
  #I realize this is not a professional way of creating the database
  # but I'm not looking for how to change this at the moment

end

post '/sources' do
  @username = params[:username]
  @password = params[:password]

  @items = DB[:db]

  @items.insert(:username => @username, :password => @password)

end

get '/signup' do
  redirect 'signup.html'
end

如果您以专业的方式执行此操作,您会将应用拆分为多个层。在路由内部,您将处于业务或逻辑层,然后将数据请求移交给数据库层。数据库层可能由 ORM(如 Sequel、Datamapper 或 ActiveRecord 等)处理,您可以在那里查询数据库、处理新用户的创建等,然后向逻辑层报告,逻辑层可以然后决定将用户引导至哪条路线和信息。

看看 Sequel documentation on models 并设置一个 User 模型来处理这些事情,然后返回一个 User 实例或(可能)nil ,类似的东西。您将需要模型中的 self.exists? 等方法。

如果您不打算也使用 migrations (hint: you should, it's just as quick) you may want to add a DB.table_exists? 方法,您真的应该将 create table 语句移出路由。

在用户名列中添加 unique constraint 可能也是个好主意。