like 语句在 sqlite3 中的 sql 检查语句中不起作用

问题描述 投票:0回答:1

我正在开发一个项目,我需要创建一个包含电话号码的表,我想通过在检查语句中使用正则表达式“^[0-9]{10}$”来检查所有字符是否都是数字,而创建表,但是当我输入任何电话号码(例如“0522233355”)时,我在包含正则表达式的检查语句中遇到错误,我附上了我的代码:

def create_table():
    customers_table = """
    create table if not exists Customers(
        phone_number nvarchar(10) primary key,
        first_name nvarchar(15),
        last_name nvarchar(15),
        city nvarchar(20),
        address nvarchar(50),
        backup_phone nvarchar(10),
        password nvarchar(20),
        check (length(phone_number) == 10),
        check (phone_number not like backup_phone),
        check (phone_number like '^[0-9]{10}$'),
        check (length(password) >= 8 and length(password) <= 20),
        check (password like '^.{8,20}$')
     )
    """
    
    products_table = """
    create table if not exists Products(
        id_number int auto_increment primary key,
        name nvarchar(50),
        img_path nvarchar(100),
        price nvarchar(10),
        description nvarchar(200),
        publish_year nvarchar(20),
        author_name nvarchar(20)
    )
    """
    
    with sqlite3.connect("Shopping.db") as connection:
        cursor = connection.cursor()
        try:
            cursor.execute(customers_table)
            cursor.execute(products_table)
            connection.commit()
        except Exception as e:
            print(e)
            connection.rollback()

我尝试使用“regexp”,但解释器无法识别它,而 sql 控制台可以轻松使用它。 我尝试过:检查(电话号码如“0522233355”),它起作用了。 我尝试过:检查(电话号码如'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0 -9][0-9]'),不起作用。 我尝试了不同的电话号码,但结果相同。 这就是我尝试过的。

python sqlite flask
1个回答
0
投票

以下是如何修改

LIKE

的用法
    create table if not exists Customers(
        phone_number nvarchar(10) primary key,
        first_name nvarchar(15),
        last_name nvarchar(15),
        city nvarchar(20),
        address nvarchar(50),
        backup_phone nvarchar(10),
        password nvarchar(20),
        check (length(phone_number) == 10),
        check (phone_number != backup_phone)
        check (phone_number GLOB '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
        check (length(password) >= 8 and length(password) <= 20)
     )
© www.soinside.com 2019 - 2024. All rights reserved.