如何使用 python faker 填充数据库

how to populate database using python faker

我正在尝试使用 python faker 填充 table,但出现此错误。这是我的代码

import psycopg2
from faker import Faker
fake = Faker()

conn = psycopg2.connect(database="testdb", user="****", password="****", host="127.0.0.1", port="5432")
print "Opened database successfully"
cur = conn.cursor()

for i in range (10):
    Id =fake.random_digit_not_null()
    name = fake.name()
    age=fake.random_number(digits=None) 
    adress =fake.address()
    salary = fake.random_int(min=0, max=9999)
    cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (Id,name,age,adress,salary)");

conn.commit()
print "Records created successfully";
conn.close()

这里是错误

Traceback (most recent call last):
  File "fakegenerator.py", line 16, in <module>
    VALUES (Id,name,age,adress,salary)");
psycopg2.ProgrammingError: column "id" does not exist
LINE 1: ...OMPANY (ID,NAME,AGE,ADDRESS,SALARY)       VALUES (Id,name,ag...
                                                             ^
HINT:  There is a column named "id" in table "company", but it cannot be referenced from this part of the query.

您没有在查询中填写值,而是按原样将字符串发送到数据库。这实际上会用以下值填充您的查询:

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (%s, %s, %s, %s, %s)", (Id, name, age, adress, salary));

这会用你想要插入到元组中的值填充变量,让 psycopg2 处理正确引用你的字符串,这对你来说工作量较小,并且可以保护你免受 SQL 注入,如果你使用你的代码作为生产代码的基础。这记录在 the module's documentation.

cur.execute 中的 sql 请求似乎有问题试试这个

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
  VALUES ({},{},{},{},{})".format(Id,name,age,adress,salary));